awkå½ä»¤
awkæ¯ä¸ç§ç¼ç¨è¯è¨ï¼ç¨äºå¨linux/unixä¸å¯¹ææ¬åæ°æ®è¿è¡å¤çãæ°æ®å¯ä»¥æ¥èªæ åè¾å
¥(stdin)ãä¸ä¸ªæå¤ä¸ªæ件ï¼æå
¶å®å½ä»¤çè¾åºãå®æ¯æç¨æ·èªå®ä¹å½æ°åå¨ææ£å表达å¼çå
è¿åè½ï¼æ¯linux/unixä¸çä¸ä¸ªå¼ºå¤§ç¼ç¨å·¥å
·ãå®å¨å½ä»¤è¡ä¸ä½¿ç¨ï¼ä½æ´å¤æ¯ä½ä¸ºèæ¬æ¥ä½¿ç¨ãawkæå¾å¤å
建çåè½ï¼æ¯å¦æ°ç»ãå½æ°çï¼è¿æ¯å®åCè¯è¨çç¸åä¹å¤ï¼çµæ´»æ§æ¯awkæ大çä¼å¿ã
awkå½ä»¤æ ¼å¼åé项
è¯æ³æ ¼å¼
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常ç¨å½ä»¤é项
-F fs fs æå®è¾å
¥åé符ï¼fså¯ä»¥æ¶å符串ææ£å表达å¼
-v var=value èµå¼ä¸ä¸ªç¨æ·å®ä¹åéï¼å°å¤é¨åéä¼ éç»awk
-f scriptfile ä»èæ¬æ件ä¸è¯»åawkå½ä»¤
awkèæ¬
awkèæ¬æ¯ç±æ¨¡å¼åæä½ç»æçã
模å¼ä¸æä½
模å¼
模å¼å¯ä»¥æ¯ä»¥ä¸ä»»æä¸ç§ï¼
æ£å表达å¼ï¼ä½¿ç¨éé
符çæ©å±é
å
³ç³»è¡¨è¾¾å¼ï¼ä½¿ç¨è¿ç®ç¬¦è¿è¡æä½ï¼å¯ä»¥æ¯å符串ææ°åçæ¯è¾æµè¯
模å¼å¹é
表达å¼ï¼ç¨è¿ç®ç¬¦ï½ï¼å¹é
ï¼å~!ä¸å¹é
BEGIN è¯å¥åï¼ patternè¯å¥åï¼ ENDè¯å¥å
æä½
æä½ç±ä¸ä¸ªæå¤ä¸ªå½ä»¤ãå½æ°ã表达å¼ç»æï¼ä¹é´ç±æ¢è¡ç¬¦æåå·éå¼ï¼å¹¶ä½äºå¤§å®å·å
ï¼ä¸»è¦é¨åæ¯ï¼åéææ°ç»èµå¼ãè¾åºå½ä»¤ãå
ç½®å½æ°ãæ§å¶æµè¯å¥ã
awkèæ¬åºæ¬æ ¼å¼
awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file
ä¸ä¸ªawkèæ¬é常ç±BEGINï¼ éç¨è¯å¥åï¼ENDè¯å¥åç»æï¼ä¸é¨åé½æ¯å¯éçã èæ¬é常æ¯è¢«åå¼å·æåå¼å·å
ä½ã
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
awkæ§è¡è¿ç¨åæ
第ä¸æ¥ï¼ æ§è¡BEGIN { commands } pattern è¯å¥åä¸çè¯å¥
BEGINè¯å¥åï¼å¨awkå¼å§ä»è¾å
¥è¾åºæµä¸è¯»åè¡ä¹åæ§è¡ï¼å¨BEGINè¯å¥åä¸æ§è¡å¦åéåå§åï¼æå°è¾åºè¡¨å¤´çæä½ã
第äºæ¥ï¼ä»æ件ææ åè¾å
¥ä¸è¯»åä¸è¡ï¼ç¶åæ§è¡pattern{ commands }è¯å¥åãå®éè¡æ«ææ件ï¼ä»ç¬¬ä¸è¡å°æåä¸è¡éå¤è¿ä¸ªè¿ç¨ï¼ç´å°å
¨é¨æ件é½è¢«è¯»åå®æ¯ã
patternè¯å¥åï¼patternè¯å¥åä¸çéç¨å½ä»¤æ¯æéè¦çé¨åï¼å®ä¹æ¯å¯éçãå¦æ没ææä¾patternè¯å¥åï¼åé»è®¤æ§è¡{ print }ï¼å³æå°æ¯ä¸ä¸ªè¯»åå°çè¡ã{ }类似ä¸ä¸ªå¾ªç¯ä½ï¼ä¼å¯¹æ件ä¸çæ¯ä¸è¡è¿è¡è¿ä»£ï¼é常å°åéåå§åè¯å¥æ¾å¨BEGINè¯å¥åä¸ï¼å°æå°ç»æçè¯å¥æ¾å¨ENDè¯å¥åä¸ã
第ä¸æ¥ï¼å½è¯»è³è¾å
¥æµæ«å°¾æ¶ï¼æ§è¡END { command }è¯å¥å
ENDè¯å¥å:å¨awkä»è¾å
¥æµä¸è¯»åå®ææçè¡ä¹åå³è¢«æ§è¡ï¼æ¯å¦æå°ææè¡çåæç»æè¿ç±»ä¿¡æ¯æ±æ»é½æ¯å¨ENDè¯å¥åä¸å®æï¼å®ä¹æ¯ä¸ä¸ªå¯éè¯å¥åã
AWKå
ç½®åé
$n : å½åè®°å½ç第n个å段ï¼æ¯å¦n为1表示第ä¸ä¸ªå段ï¼n为2表示第äºä¸ªå段ã
$0 : è¿ä¸ªåéå
å«æ§è¡è¿ç¨ä¸å½åè¡çææ¬å
容ã
ARGC : å½ä»¤è¡åæ°çæ°ç®ã
ARGIND : å½ä»¤è¡ä¸å½åæ件çä½ç½®ï¼ä»0å¼å§ç®ï¼ã
ARGV : å
å«å½ä»¤è¡åæ°çæ°ç»ã
CONVFMT : æ°å转æ¢æ ¼å¼ï¼é»è®¤å¼ä¸º%.6gï¼ã
ENVIRON : ç¯å¢åéå
³èæ°ç»ã
ERRNO : æåä¸ä¸ªç³»ç»é误çæè¿°ã
FIELDWIDTHS : å段宽度å表ï¼ç¨ç©ºæ ¼é®åéï¼ã
FILENAME : å½åè¾å
¥æ件çåã
NR : 表示记å½æ°ï¼å¨æ§è¡è¿ç¨ä¸å¯¹åºäºå½åçè¡å·
FNR : åNR :ï¼ä½ç¸å¯¹äºå½åæ件ã
FS : å段åé符ï¼é»è®¤æ¯ä»»ä½ç©ºæ ¼ï¼ã
IGNORECASE : å¦æ为çï¼åè¿è¡å¿½ç¥å¤§å°åçå¹é
ã
NF : 表示å段æ°ï¼å¨æ§è¡è¿ç¨ä¸å¯¹åºäºå½åçå段æ°ã print $NFçåºä¸è¡ä¸æåä¸ä¸ªå段
OFMT : æ°åçè¾åºæ ¼å¼ï¼é»è®¤å¼æ¯%.6gï¼ã
OFS : è¾åºå段åé符ï¼é»è®¤å¼æ¯ä¸ä¸ªç©ºæ ¼ï¼ã
ORS : è¾åºè®°å½åé符ï¼é»è®¤å¼æ¯ä¸ä¸ªæ¢è¡ç¬¦ï¼ã
RS : è®°å½åé符ï¼é»è®¤æ¯ä¸ä¸ªæ¢è¡ç¬¦ï¼ã
RSTART : ç±matchå½æ°æå¹é
çå符串ç第ä¸ä¸ªä½ç½®ã
RLENGTH : ç±matchå½æ°æå¹é
çå符串çé¿åº¦ã
SUBSEP : æ°ç»ä¸æ åé符ï¼é»è®¤å¼æ¯34ï¼ã
å°å¤é¨åéå¼ä¼ éç»awk
åå© -v é项ï¼å¯ä»¥å°æ¥èªå¤é¨å¼ï¼éstdinï¼ä¼ éç»awk
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
å®ä¹å
é¨åéæ¥æ¶å¤é¨åé
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
å½è¾å
¥æ¥èªæ件æ¶
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
awkè¿ç®
ç®æ¯è¿ç®ï¼ï¼+ï¼-ï¼*ï¼/ï¼&ï¼ï¼ï¼â¦â¦ï¼++ï¼--ï¼
ææç¨ä½ç®æ¯è¿ç®ç¬¦è¿è¡æä½æ¶ï¼æä½æ°èªå¨è½¬ä¸ºæ°å¼ï¼ææéæ°å¼é½å为0
èµå¼è¿ç®ï¼ï¼=ï¼ +=ï¼ -=ï¼*=ï¼/=ï¼%=ï¼â¦â¦=ï¼**=ï¼
é»è¾è¿ç®ç¬¦: (||, &&)
å
³ç³»è¿ç®ç¬¦ï¼ï¼<, <=, >,>=,!=, ==ï¼
æ£åè¿ç®ç¬¦ï¼ï¼ï½ï¼ï½!ï¼(å¹é
æ£å表达å¼ï¼ä¸ä¸å¹é
æ£å表达å¼)
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
awké«çº§è¾å
¥è¾åº
读åä¸ä¸æ¡è®°å½ï¼next è¯å¥
awkä¸nextè¯å¥ä½¿ç¨ï¼å¨å¾ªç¯éè¡å¹é
ï¼å¦æéå°nextï¼å°±ä¼è·³è¿å½åè¡ï¼ç´æ¥å¿½ç¥ä¸é¢è¯å¥ãèè¿è¡ä¸ä¸è¡å¹é
ãnetè¯å¥ä¸è¬ç¨äºå¤è¡å并ï¼
awk 'NR%2==1{next}{print NR,$0;}' text.txt
说æï¼ å½è®°å½è¡å·é¤ä»¥2ä½1ï¼å°±è·³è¿å½åè¡ãä¸é¢çprint NR,$0ä¹ä¸ä¼æ§è¡ãä¸ä¸è¡å¼å§ï¼ç¨åºæå¼å§å¤æNR%2å¼ãè¿ä¸ªæ¶åè®°å½è¡å·æ¯ï¼2 ï¼å°±ä¼æ§è¡ä¸é¢è¯å¥åï¼print NR,$0
读åä¸è¡è®°å½ï¼getline è¯å¥
awk getlineç¨æ³ï¼è¾åºéå®åéç¨å°getlineå½æ°ãgetlineä»æ åè¾å
¥ã管éæè
å½åæ£å¨å¤ççæ件ä¹å¤çå
¶ä»è¾å
¥æ件è·å¾è¾å
¥ãå®è´è´£ä»è¾å
¥è·å¾ä¸ä¸è¡çå
容ï¼å¹¶ç»NF,NRåFNRçå
建åéèµå¼ãå¦æå¾å°ä¸æ¡è®°å½ï¼getlineå½æ°è¿å1ï¼å¦æå°è¾¾æ件çæ«å°¾å°±è¿å0ï¼å¦æåºç°é误ï¼ä¾å¦æå¼æ件失败ï¼å°±è¿å-1ã
è¯æ³æ ¼å¼ï¼getline var åévarå
å«äºç¹å®è¡çå
容
ç¨æ³è¯´æï¼
å½å
¶å·¦å³æ éå®å符æ¶|ï¼<æ¶ï¼getlineä½ç¨äºå½åæ件ï¼è¯»å
¥å½åæ件ç第ä¸è¡ç»å
¶åè·çåévaræ$0ï¼æ åéï¼ï¼åºè¯¥æ³¨æå°ï¼ç±äºawkå¨å¤çgetlineä¹åå·²ç»è¯»å
¥äºä¸è¡ï¼æ以getlineå¾å°çè¿åç»ææ¯éè¡çã
å½å
¶å·¦å³æéå®å符æ¶|ï¼<æ¶ï¼getlineåä½ç¨äºå®åè¾å
¥æ件ï¼ç±äºè¯¥æ件æ¯åæå¼ï¼å¹¶æ²¡æ被awk读å
¥ä¸è¡ï¼åªæ¯getline读å
¥ï¼é£ä¹getlineè¿åçæ¯è¯¥æ件ç第ä¸è¡ï¼èä¸æ¯éè¡ã
æ件æä½
æå¼æ件 open("filename")
å
³éæ件 close("filename")
è¾åºå°æ件 éå®åå°æ件ï¼å¦echo | awk '{printf("hello word!n") > "datafile"}'
循ç¯ç»æ
for循ç¯
for(åé in æ°ç»)
{è¯å¥}
for(åé;æ¡ä»¶;表达å¼)
{è¯å¥}
while循ç¯
while(表达å¼)
{è¯å¥}
do...while循ç¯
do
{è¯å¥} while(æ¡ä»¶)
å
¶ä»ç¸å
³è¯å¥
breakï¼éåºç¨åºå¾ªç¯
continue: è¿å
¥ä¸ä¸æ¬¡å¾ªç¯
nextï¼è¯»åä¸ä¸ä¸ªè¾å
¥è¡
exitï¼éåºä¸»è¾å
¥å¾ªç¯ï¼è¿å
¥ENDï¼è¥æ²¡æENDæENDä¸æexitè¯å¥ï¼åéåºèæ¬ã
æ°ç»
å¨awkä¸æ°ç»å«åå
³èæ°ç»(associative arrays)ãawk ä¸çæ°ç»ä¸å¿
æå声æï¼ä¹ä¸å¿
声æ大å°ãæ°ç»å
ç´ ç¨0æ空å符串æ¥åå§åï¼è¿æ ¹æ®ä¸ä¸æèå®ã
awk 'BEGIN{
Array[1]="sun"
Array[2]="kai"
Array["first"]="www"
Array["last"]="name"
Array["birth"]="1987"
info = "it is a test";
lens = split(info,tA," ");
for(item in tA)
{print tA[item];}
for(i=1;i<=lens;i++)
{print tA[i];}
print length(tA[lens]);
} {
print "item in array";
for(item in Array) {print Array[item]};
print "print in i++";
for(i=1;i<=length(Array);i++) {print Array[i]};
}'
è·åæ°ç»é¿åº¦
awk 'BEGIN{
info="it is a test";
lens=split(info,tA," "); #使ç¨splitå½æ°è·åæ°ç»é¿åº¦
print length(tA),lens; #使ç¨lengthå½æ°è·åæ°ç»é¿åº¦ï¼çæ¬æè¦æ±ï¼
}'
**说æï¼** **çæ¬å¤é«**çawkå½ä¸ï¼æ¯æç´æ¥å¾å°æ°ç»é¿åº¦çæ¹æ³length()ï¼å¦æawkççæ¬è¿ä½ï¼åä¸æ¯æãå¦å¤ï¼å¦æä¼ ç»lengthçåéæ¯ä¸ä¸ªå符串ï¼é£ä¹lengthè¿åçåå符串çé¿åº¦ã
è¾åºæ°ç»å
容
æåºè¾åº for...in
å 为æ°ç»æ¶å
³èæ°ç»ï¼é»è®¤æ¯æ åºç
æ åºè¾åº for(i=1;i<l=ens;i++)
æ°ç»ä¸æ ä»1å¼å§
å¤æé®å¼æ¯å¦åå¨
#é误çå¤ææ¹æ³ï¼awkæ°ç»æ¯å
³èæ°ç»ï¼åªè¦éè¿æ°ç»å¼ç¨å®çKEYï¼å°±ä¼èªå¨å建ã
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
if(tB["c"]!="1"){ #tB["c"]没æå®ä¹ï¼ä½æ¯å¾ªç¯çæ¶åä¼è¾åº
print "no found";
};
for(k in tB){
print k,tB[k];
}}'
#æ£ç¡®çå¤å®æ¹æ³ï¼ä½¿ç¨ if ( key in array) å¤ææ°ç»ä¸æ¯å¦å
å« é®å¼
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
if( "c" in tB){
print "ok";
};
for(k in tB){
print k,tB[k];
}}'
å é¤é®å¼
delete array[key]å¯ä»¥å é¤ï¼å¯¹åºæ°ç»keyçï¼åºåå¼ã
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
delete tB["a"];
for(k in tB){
print k,tB[k];
}}'
äºç»´ï¼å¤ç»´æ°ç»
awkçå¤ç»´æ°ç»å¨æ¬è´¨ä¸æ¯ä¸ç»´æ°ç»ï¼æ´ç¡®åä¸ç¹ï¼awkå¨åå¨ä¸å¹¶ä¸æ¯æå¤ç»´æ°ç»ãawkæä¾äºé»è¾ä¸æ¨¡æäºç»´æ°ç»ç访é®æ¹å¼ãä¾å¦ï¼array[2,4]=1è¿æ ·ç访é®æ¯å
许çãawk使ç¨ä¸ä¸ªç¹æ®çå符串SUBSEPä½ä¸ºåå²å段ã 类似ä¸ç»´æ°ç»çæåæµè¯ï¼å¤ç»´æ°ç»å¯ä»¥ä½¿ç¨if ( (i,j) in array)è¿æ ·çè¯æ³ï¼ä½æ¯ä¸æ å¿
é¡»æ¾ç½®å¨åæ¬å·ä¸ã类似ä¸ç»´æ°ç»ç循ç¯è®¿é®ï¼å¤ç»´æ°ç»ä½¿ç¨for ( item in array )è¿æ ·çè¯æ³éåæ°ç»ãä¸ä¸ç»´æ°ç»ä¸åçæ¯ï¼å¤ç»´æ°ç»å¿
须使ç¨split()å½æ°æ¥è®¿é®åç¬çä¸æ åéã
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j;
print i,"*",j,"=",tarr[i,j];
}
}
}'
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j; } }
for(m in tarr){
split(m,tarr2,SUBSEP);
print tarr2[1],"*",tarr2[2],"=",tarr[m]; } }'
å
ç½®å½æ°
ç®æ¯å½æ°
æ ¼å¼ æè¿°
atan2( y, x ) è¿å y/x çåæ£åã
cos( x ) è¿å x çä½å¼¦ï¼x æ¯å¼§åº¦ã
sin( x ) è¿å x çæ£å¼¦ï¼x æ¯å¼§åº¦ã
exp( x ) è¿å x å¹å½æ°ã
log( x ) è¿å x çèªç¶å¯¹æ°ã
sqrt( x ) è¿å x å¹³æ¹æ ¹ã
int( x ) è¿å x çæªæè³æ´æ°çå¼ã
rand( ) è¿åä»»ææ°å nï¼å
¶ä¸ 0 <= n < 1ã
srand( [expr] ) å° rand å½æ°çç§åå¼è®¾ç½®ä¸º Expr åæ°çå¼ï¼æå¦æçç¥ Expr åæ°å使ç¨æ天çæ¶é´ãè¿åå
åçç§åå¼ã
awk 'BEGIN{
OFMT="%.3f"; #OFMT 设置è¾åºæ°æ®æ ¼å¼æ¯ä¿ç3ä½å°æ°ã
fs=sin(1);
fe=exp(10);
fl=log(10);
fi=int(3.1415);
print fs,fe,fl,fi;
}'
è¾åºç»æ为ï¼0.841 22026.466 2.303 3
awk 'BEGIN{
srand();
fr=int(100*rand());
print fr;
}'
è¾åºï¼78
å符串å½æ°
æ ¼å¼ æè¿°
gsub( Ere, Repl, [ In ] ) é¤äºæ£å表达å¼ææå
·ä½å¼è¢«æ¿ä»£è¿ç¹ï¼å®å sub å½æ°å®å
¨ä¸æ ·å°æ§è¡ã
sub( Ere, Repl, [ In ] ) ç¨ Repl åæ°æå®çå符串æ¿æ¢ In åæ°æå®çå符串ä¸çç± Ere åæ°æå®çæ©å±æ£å表达å¼ç第ä¸ä¸ªå
·ä½å¼ãsub å½æ°è¿åæ¿æ¢çæ°éãåºç°å¨ Repl åæ°æå®çå符串ä¸ç &ï¼å符å·ï¼ç± In åæ°æå®çä¸ Ere åæ°çæå®çæ©å±æ£å表达å¼å¹é
çå符串æ¿æ¢ãå¦ææªæå® In åæ°ï¼ç¼ºçå¼æ¯æ´ä¸ªè®°å½ï¼$0 è®°å½åéï¼ã
index( String1, String2 ) å¨ç± String1 åæ°æå®çå符串ï¼å
¶ä¸æåºç° String2 æå®çåæ°ï¼ä¸ï¼è¿åä½ç½®ï¼ä» 1 å¼å§ç¼å·ãå¦æ String2 åæ°ä¸å¨ String1 åæ°ä¸åºç°ï¼åè¿å 0ï¼é¶ï¼ã
length [(String)] è¿å String åæ°æå®çå符串çé¿åº¦ï¼å符形å¼ï¼ãå¦ææªç»åº String åæ°ï¼åè¿åæ´ä¸ªè®°å½çé¿åº¦ï¼$0 è®°å½åéï¼ã
blength [(String)] è¿å String åæ°æå®çå符串çé¿åº¦ï¼ä»¥åè为åä½ï¼ãå¦ææªç»åº String åæ°ï¼åè¿åæ´ä¸ªè®°å½çé¿åº¦ï¼$0 è®°å½åéï¼ã
substr( String, M, [ N ] ) è¿åå
·æ N åæ°æå®çå符æ°éå串ãåä¸²ä» String åæ°æå®çå符串åå¾ï¼å
¶å符以 M åæ°æå®çä½ç½®å¼å§ãM åæ°æå®ä¸ºå° String åæ°ä¸ç第ä¸ä¸ªå符ä½ä¸ºç¼å· 1ãå¦ææªæå® N åæ°ï¼åå串çé¿åº¦å°æ¯ M åæ°æå®çä½ç½®å° String åæ°çæ«å°¾ çé¿åº¦ã
match( String, Ere ) å¨ String åæ°æå®çå符串ï¼Ere åæ°æå®çæ©å±æ£å表达å¼åºç°å¨å
¶ä¸ï¼ä¸è¿åä½ç½®ï¼å符形å¼ï¼ï¼ä» 1 å¼å§ç¼å·ï¼æå¦æ Ere åæ°ä¸åºç°ï¼åè¿å 0ï¼é¶ï¼ãRSTART ç¹æ®åé设置为è¿åå¼ãRLENGTH ç¹æ®åé设置为å¹é
çå符串çé¿åº¦ï¼æå¦ææªæ¾å°ä»»ä½å¹é
ï¼å设置为 -1ï¼è´ä¸ï¼ã
tolower( String ) è¿å String åæ°æå®çå符串ï¼å符串ä¸æ¯ä¸ªå¤§åå符å°æ´æ¹ä¸ºå°åã大ååå°åçæ å°ç±å½åè¯è¨ç¯å¢ç LC_CTYPE èç´å®ä¹ã
toupper( String ) è¿å String åæ°æå®çå符串ï¼å符串ä¸æ¯ä¸ªå°åå符å°æ´æ¹ä¸ºå¤§åã大ååå°åçæ å°ç±å½åè¯è¨ç¯å¢ç LC_CTYPE èç´å®ä¹ã
sprintf(Format, Expr, Expr, . . . ) æ ¹æ® Format åæ°æå®ç printf åä¾ç¨æ ¼å¼å符串æ¥æ ¼å¼å Expr åæ°æå®ç表达å¼å¹¶è¿åæåçæçå符串ã
说æï¼ Ereé½å¯ä»¥æ¯æ£å表达å¼ã
æ¶é´å½æ°
æ ¼å¼ æè¿°
mktime( YYYY MM dd HH MM ss[ DST]) çææ¶é´æ ¼å¼
strftime([format [, timestamp]]) æ ¼å¼åæ¶é´è¾åºï¼å°æ¶é´æ³è½¬ä¸ºæ¶é´å符串 å
·ä½æ ¼å¼ï¼è§ä¸è¡¨.
systime() å¾å°æ¶é´æ³,è¿åä»1970å¹´1æ1æ¥å¼å§å°å½åæ¶é´(ä¸è®¡é°å¹´)çæ´ç§æ°
strftimeæ¥æåæ¶é´æ ¼å¼è¯´æ符 :
æ ¼å¼ æè¿°
%a ææå ç缩å(Sun)
%A ææå çå®æ´åæ³(Sunday)
%b æåç缩å(Oct)
%B æåçå®æ´åæ³(October)
%c æ¬å°æ¥æåæ¶é´
%d åè¿å¶æ¥æ
%D æ¥æ 08/20/99
%e æ¥æï¼å¦æåªæä¸ä½ä¼è¡¥ä¸ä¸ä¸ªç©ºæ ¼
%H ç¨åè¿å¶è¡¨ç¤º24å°æ¶æ ¼å¼çå°æ¶
%I ç¨åè¿å¶è¡¨ç¤º12å°æ¶æ ¼å¼çå°æ¶
%j ä»1æ1æ¥èµ·ä¸å¹´ä¸ç第å 天
%m åè¿å¶è¡¨ç¤ºçæ份
%M åè¿å¶è¡¨ç¤ºçåé
%p 12å°æ¶è¡¨ç¤ºæ³(AM/PM)
%S åè¿å¶è¡¨ç¤ºçç§
%U åè¿å¶è¡¨ç¤ºçä¸å¹´ä¸ç第å 个ææ(ææ天ä½ä¸ºä¸ä¸ªææçå¼å§)
%w åè¿å¶è¡¨ç¤ºçææå (ææ天æ¯0)
%W åè¿å¶è¡¨ç¤ºçä¸å¹´ä¸ç第å 个ææ(ææä¸ä½ä¸ºä¸ä¸ªææçå¼å§)
%x éæ°è®¾ç½®æ¬å°æ¥æ(08/20/99)
%X éæ°è®¾ç½®æ¬å°æ¶é´(12ï¼00ï¼00)
%y 两ä½æ°å表示çå¹´(99)
%Y å½åæ份
%Z æ¶åº(PDT)
%% ç¾åå·(%)
#mktime使ç¨
awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'
è¾åºï¼2001å¹´01æ01æ¥ ææä¸ 12æ¶12å12ç§
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
è¾åºï¼2634468
#æ±2个æ¶é´æ®µä¸é´æ¶é´å·®ï¼ä»ç»äºstrftime使ç¨æ¹æ³
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'
è¾åºï¼308201392
å
¶ä»ä¸è¬å½æ°
æ ¼å¼ æè¿°
close( Expression ) ç¨åä¸ä¸ªå¸¦å符串å¼ç Expression åæ°æ¥å
³éç± print æ printf è¯å¥æå¼çæè°ç¨getline å½æ°æå¼çæ件æ管éãå¦ææ件æ管éæåå
³éï¼åè¿å 0ï¼å
¶å®æ
åµä¸è¿åéé¶å¼ãå¦ææç®åä¸ä¸ªæ件ï¼å¹¶ç¨åå¨åä¸ä¸ªç¨åºä¸è¯»åæ件ï¼å close è¯å¥æ¯å¿
éçã
system(command ) æ§è¡ Command åæ°æå®çå½ä»¤ï¼å¹¶è¿åéåºç¶æãçåäº system åä¾ç¨ã
Expression | getline [ Variable ] ä»æ¥èª Expression åæ°æå®çå½ä»¤çè¾åºä¸éè¿ç®¡éä¼ éçæµä¸è¯»åä¸ä¸ªè¾å
¥è®°å½ï¼å¹¶å°è¯¥è®°å½çå¼æå®ç» Variable åæ°æå®çåéãå¦æå½åæªæå¼å° Expression åæ°çå¼ä½ä¸ºå
¶å½ä»¤å称çæµï¼åå建æµãå建çæµçåäºè°ç¨ popen åä¾ç¨ï¼æ¤æ¶ Command åæ°å Expression åæ°çå¼ä¸ Mode åæ°è®¾ç½®ä¸ºä¸ä¸ªæ¯ r çå¼ãåªè¦æµä¿çæå¼ä¸ Expression åæ°æ±å¾åä¸ä¸ªå符串ï¼å对 getline å½æ°çæ¯æ¬¡åç»è°ç¨è¯»åå¦ä¸ä¸ªè®°å½ãå¦ææªæå® Variable åæ°ï¼å $0 è®°å½åéå NF ç¹æ®åé设置为ä»æµè¯»åçè®°å½ã
getline [ Variable ] < Expression ä» Expression åæ°æå®çæ件读åè¾å
¥çä¸ä¸ä¸ªè®°å½ï¼å¹¶å° Variable åæ°æå®çåé设置为该记å½çå¼ãåªè¦æµä¿çæå¼ä¸ Expression åæ°å¯¹åä¸ä¸ªå符串æ±å¼ï¼å对 getline å½æ°çæ¯æ¬¡åç»è°ç¨è¯»åå¦ä¸ä¸ªè®°å½ãå¦ææªæå® Variable åæ°ï¼å $0 è®°å½åéå NF ç¹æ®åé设置为ä»æµè¯»åçè®°å½ã
getline [ Variable ] å° Variable åæ°æå®çåé设置为ä»å½åè¾å
¥æ件读åçä¸ä¸ä¸ªè¾å
¥è®°å½ãå¦ææªæå® Variable åæ°ï¼å $0 è®°å½åé设置为该记å½çå¼ï¼è¿å°è®¾ç½® NFãNR å FNR ç¹æ®åéã
#æå¼å¤é¨æ件ï¼closeç¨æ³ï¼
awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
è¾åº: root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
#éè¡è¯»åå¤é¨æ件(getline使ç¨æ¹æ³ï¼
awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}'
è¾åºï¼root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
awk 'BEGIN{print "Enter your name:";getline name;print name;}'
Enter your name:
chengmo
chengmo
#è°ç¨å¤é¨åºç¨ç¨åº(system使ç¨æ¹æ³ï¼ bè¿åå¼ï¼æ¯æ§è¡ç»æã
awk 'BEGIN{b=system("ls -al");print b;}'
è¾åºï¼ total 42092 drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 . drwxr-xr-x 95 root root 4096 10-08 14:01 ..
温馨提示:答案为网友推荐,仅供参考