awk用法小结(作者总结)
生活随笔
收集整理的這篇文章主要介紹了
awk用法小结(作者总结)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d.html awk?用法:awk?'?pattern?{action}?'??
變量名 含義?
ARGC 命令行變元個數?
ARGV 命令行變元數組?
FILENAME 當前輸入文件名?
FNR 當前文件中的記錄號?
FS 輸入域分隔符,默認為一個空格?
RS 輸入記錄分隔符?
NF 當前記錄里域個數?
NR 到目前為止記錄數?
OFS 輸出域分隔符?
ORS 輸出記錄分隔符?
1、awk?'/101/'???????????????file?顯示文件file中包含101的匹配行。?
???awk?'/101/,/105/'?????????file?
???awk?'$1?==?5'?????????????file?
???awk?'$1?==?"CT"'??????????file?注意必須帶雙引號?
???awk?'$1?*?$2?>100?'???????file??
???awk?'$2?>5?&&?$2<=15'?????file?
2、awk?'{print?NR,NF,$1,$NF,}'?file?顯示文件file的當前記錄號、域數和每一行的第一個和最后一個域。?
???awk?'/101/?{print?$1,$2?+?10}'?file?顯示文件file的匹配行的第一、二個域加10。?
???awk?'/101/?{print?$1$2}'??file?
???awk?'/101/?{print?$1?$2}'?file?顯示文件file的匹配行的第一、二個域,但顯示時域中間沒有分隔符。?
3、df?|?awk?'$4>1000000?'?????????通過管道符獲得輸入,如:顯示第4個域滿足條件的行。?
4、awk?-F?"|"?'{print?$1}'???file?按照新的分隔符“|”進行操作。?
???awk??'BEGIN?{?FS="[:?\t|]"?}?
???{print?$1,$2,$3}'? ?????file?通過設置輸入分隔符(FS="[:?\t|]")修改輸入分隔符。?
???Sep="|"?
???awk?-F?$Sep?'{print?$1}'??file?按照環境變量Sep的值做為分隔符。????
???awk?-F?'[?:\t|]'?'{print?$1}'?file?按照正則表達式的值做為分隔符,這里代表空格、:、TAB、|同時做為分隔符。?
???awk?-F?'[][]'????'{print?$1}'?file?按照正則表達式的值做為分隔符,這里代表[、]?
5、awk?-f?awkfile? ?????file?通過文件awkfile的內容依次進行控制。?
???cat?awkfile?
/101/{print?"\047?Hello!?\047"}?--遇到匹配行以后打印?'?Hello!?'.\047代表單引號。?
{print?$1,$2}???????????????????--因為沒有模式控制,打印每一行的前兩個域。?
6、awk?'$1?~?/101/?{print?$1}'?file?顯示文件中第一個域匹配101的行(記錄)。?
7、awk???'BEGIN?{?OFS="%"}?
???{print?$1,$2}'???????????file?通過設置輸出分隔符(OFS="%")修改輸出格式。?
8、awk???'BEGIN?{?max=100?;print?"max="?max}?????????????BEGIN?表示在處理任意行之前進行的操作。?
???{max=($1?>max??$1:max);?print?$1,"Now?max?is?"max}'?file?取得文件第一個域的最大值。?
???(表達式1?表達式2:表達式3?相當于:?
???if?(表達式1)?
???????表達式2?
???else?
???????表達式3?
???awk?'{print?($1>4???"high?"$1:?"low?"$1)}'?file??
9、awk?'$1?*?$2?>100?{print?$1}'?file?顯示文件中第一個域匹配101的行(記錄)。?
10、awk?'{$1?==?'Chi'?{$3?=?'China';?print}'?file?找到匹配行后先將第3個域替換后再顯示該行(記錄)。?
????awk?'{$7?%=?3;?print?$7}'??file?將第7域被3除,并將余數賦給第7域再打印。?
11、awk?'/tom/?{wage=$2+$3;?printf?wage}'?file?找到匹配行后為變量wage賦值并打印該變量。?
12、awk?'/tom/?{count++;}??
?????????END?{print?"tom?was?found?"count"?times"}'?file?END表示在所有輸入行處理完后進行處理。?
13、awk?'gsub(/\$/,"");gsub(/,/,"");?cost+=$4;?
?????????END?{print?"The?total?is?$"?cost>"filename"}'????file?gsub函數用空串替換$和,再將結果輸出到filename中。?
????1?2?3?$1,200.00?
????1?2?3?$2,300.00?
????1?2?3?$4,000.00?
????awk?'{gsub(/\$/,"");gsub(/,/,"");?
????if?($4>1000&&$4<2000)?c1+=$4;?
????else?if?($4>2000&&$4<3000)?c2+=$4;?
????else?if?($4>3000&&$4<4000)?c3+=$4;?
????else?c4+=$4;?}?
????END?{printf??"c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"'?file?
????通過if和else?if完成條件語句?
????awk?'{gsub(/\$/,"");gsub(/,/,"");?
????if?($4>3000&&$4<4000)?exit;?
????else?c4+=$4;?}?
????END?{printf??"c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"'?file?
????通過exit在某條件時退出,但是仍執行END操作。?
????awk?'{gsub(/\$/,"");gsub(/,/,"");?
????if?($4>3000)?next;?
????else?c4+=$4;?}?
????END?{printf??"c4=[%d]\n",c4}"'?file?
????通過next在某條件時跳過該行,對下一行執行操作。?
14、awk?'{?print?FILENAME,$0?}'?file1?file2?file3>fileall?把file1、file2、file3的文件內容全部寫到fileall中,格式為?
????打印文件并前置文件名。?
15、awk?'?$1!=previous?{?close(previous);?previous=$1?}????
????{print?substr($0,index($0,"?")?+1)>$1}'?fileall?把合并后的文件重新分拆為3個文件。并與原文件一致。?
16、awk?'BEGIN?{"date"|getline?d;?print?d}'?????????通過管道把date的執行結果送給getline,并賦給變量d,然后打印。??
17、awk?'BEGIN?{system("echo?\"Input?your?name:\\c\"");?getline?d;print?"\nYour?name?is",d,"\b!\n"}'?
????通過getline命令交互輸入name,并顯示出來。?
????awk?'BEGIN?{FS=":";?while(getline<?"/etc/passwd"?>0)?{?if($1~"050[0-9]_")?print?$1}}'?
????打印/etc/passwd文件中用戶名包含050x_的用戶名。?
18、awk?'{?i=1;while(i<nf)?{print?nf,$i;i++}}'?file?通過while語句實現循環。?< span="">
????awk?'{?for(i=1;i<nf;i++)?{print?nf,$i}}'???file?通過for語句實現循環。?????< span="">
????type?file|awk?-F?"/"?'?
????{?for(i=1;i<nf;i++)?< span="">
????{?if(i==NF-1)?{?printf?"%s",$i?}?
????else?{?printf?"%s/",$i?}?}}'???????????????顯示一個文件的全路徑。?
????用for和if顯示日期?
????awk??'BEGIN?{?
for(j=1;j<=12;j++)?
{?flag=0;?
??printf?"\n%d月份\n",j;?
????????for(i=1;i<=31;i++)?
????????{?
????????if?(j==2&&i>28)?flag=1;?
????????if?((j==4||j==6||j==9||j==11)&&i>30)?flag=1;?
????????if?(flag==0)?{printf?"%02d%02d?",j,i}?
????????}?
}?
}'?
19、在awk中調用系統變量必須用單引號,如果是雙引號,則表示字符串?
Flag=abcd?
awk?'{print?'$Flag'}'???結果為abcd?
awk?'{print??"$Flag"}'???結果為$Flag
變量名 含義?
ARGC 命令行變元個數?
ARGV 命令行變元數組?
FILENAME 當前輸入文件名?
FNR 當前文件中的記錄號?
FS 輸入域分隔符,默認為一個空格?
RS 輸入記錄分隔符?
NF 當前記錄里域個數?
NR 到目前為止記錄數?
OFS 輸出域分隔符?
ORS 輸出記錄分隔符?
1、awk?'/101/'???????????????file?顯示文件file中包含101的匹配行。?
???awk?'/101/,/105/'?????????file?
???awk?'$1?==?5'?????????????file?
???awk?'$1?==?"CT"'??????????file?注意必須帶雙引號?
???awk?'$1?*?$2?>100?'???????file??
???awk?'$2?>5?&&?$2<=15'?????file?
2、awk?'{print?NR,NF,$1,$NF,}'?file?顯示文件file的當前記錄號、域數和每一行的第一個和最后一個域。?
???awk?'/101/?{print?$1,$2?+?10}'?file?顯示文件file的匹配行的第一、二個域加10。?
???awk?'/101/?{print?$1$2}'??file?
???awk?'/101/?{print?$1?$2}'?file?顯示文件file的匹配行的第一、二個域,但顯示時域中間沒有分隔符。?
3、df?|?awk?'$4>1000000?'?????????通過管道符獲得輸入,如:顯示第4個域滿足條件的行。?
4、awk?-F?"|"?'{print?$1}'???file?按照新的分隔符“|”進行操作。?
???awk??'BEGIN?{?FS="[:?\t|]"?}?
???{print?$1,$2,$3}'? ?????file?通過設置輸入分隔符(FS="[:?\t|]")修改輸入分隔符。?
???Sep="|"?
???awk?-F?$Sep?'{print?$1}'??file?按照環境變量Sep的值做為分隔符。????
???awk?-F?'[?:\t|]'?'{print?$1}'?file?按照正則表達式的值做為分隔符,這里代表空格、:、TAB、|同時做為分隔符。?
???awk?-F?'[][]'????'{print?$1}'?file?按照正則表達式的值做為分隔符,這里代表[、]?
5、awk?-f?awkfile? ?????file?通過文件awkfile的內容依次進行控制。?
???cat?awkfile?
/101/{print?"\047?Hello!?\047"}?--遇到匹配行以后打印?'?Hello!?'.\047代表單引號。?
{print?$1,$2}???????????????????--因為沒有模式控制,打印每一行的前兩個域。?
6、awk?'$1?~?/101/?{print?$1}'?file?顯示文件中第一個域匹配101的行(記錄)。?
7、awk???'BEGIN?{?OFS="%"}?
???{print?$1,$2}'???????????file?通過設置輸出分隔符(OFS="%")修改輸出格式。?
8、awk???'BEGIN?{?max=100?;print?"max="?max}?????????????BEGIN?表示在處理任意行之前進行的操作。?
???{max=($1?>max??$1:max);?print?$1,"Now?max?is?"max}'?file?取得文件第一個域的最大值。?
???(表達式1?表達式2:表達式3?相當于:?
???if?(表達式1)?
???????表達式2?
???else?
???????表達式3?
???awk?'{print?($1>4???"high?"$1:?"low?"$1)}'?file??
9、awk?'$1?*?$2?>100?{print?$1}'?file?顯示文件中第一個域匹配101的行(記錄)。?
10、awk?'{$1?==?'Chi'?{$3?=?'China';?print}'?file?找到匹配行后先將第3個域替換后再顯示該行(記錄)。?
????awk?'{$7?%=?3;?print?$7}'??file?將第7域被3除,并將余數賦給第7域再打印。?
11、awk?'/tom/?{wage=$2+$3;?printf?wage}'?file?找到匹配行后為變量wage賦值并打印該變量。?
12、awk?'/tom/?{count++;}??
?????????END?{print?"tom?was?found?"count"?times"}'?file?END表示在所有輸入行處理完后進行處理。?
13、awk?'gsub(/\$/,"");gsub(/,/,"");?cost+=$4;?
?????????END?{print?"The?total?is?$"?cost>"filename"}'????file?gsub函數用空串替換$和,再將結果輸出到filename中。?
????1?2?3?$1,200.00?
????1?2?3?$2,300.00?
????1?2?3?$4,000.00?
????awk?'{gsub(/\$/,"");gsub(/,/,"");?
????if?($4>1000&&$4<2000)?c1+=$4;?
????else?if?($4>2000&&$4<3000)?c2+=$4;?
????else?if?($4>3000&&$4<4000)?c3+=$4;?
????else?c4+=$4;?}?
????END?{printf??"c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"'?file?
????通過if和else?if完成條件語句?
????awk?'{gsub(/\$/,"");gsub(/,/,"");?
????if?($4>3000&&$4<4000)?exit;?
????else?c4+=$4;?}?
????END?{printf??"c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"'?file?
????通過exit在某條件時退出,但是仍執行END操作。?
????awk?'{gsub(/\$/,"");gsub(/,/,"");?
????if?($4>3000)?next;?
????else?c4+=$4;?}?
????END?{printf??"c4=[%d]\n",c4}"'?file?
????通過next在某條件時跳過該行,對下一行執行操作。?
14、awk?'{?print?FILENAME,$0?}'?file1?file2?file3>fileall?把file1、file2、file3的文件內容全部寫到fileall中,格式為?
????打印文件并前置文件名。?
15、awk?'?$1!=previous?{?close(previous);?previous=$1?}????
????{print?substr($0,index($0,"?")?+1)>$1}'?fileall?把合并后的文件重新分拆為3個文件。并與原文件一致。?
16、awk?'BEGIN?{"date"|getline?d;?print?d}'?????????通過管道把date的執行結果送給getline,并賦給變量d,然后打印。??
17、awk?'BEGIN?{system("echo?\"Input?your?name:\\c\"");?getline?d;print?"\nYour?name?is",d,"\b!\n"}'?
????通過getline命令交互輸入name,并顯示出來。?
????awk?'BEGIN?{FS=":";?while(getline<?"/etc/passwd"?>0)?{?if($1~"050[0-9]_")?print?$1}}'?
????打印/etc/passwd文件中用戶名包含050x_的用戶名。?
18、awk?'{?i=1;while(i<nf)?{print?nf,$i;i++}}'?file?通過while語句實現循環。?< span="">
????awk?'{?for(i=1;i<nf;i++)?{print?nf,$i}}'???file?通過for語句實現循環。?????< span="">
????type?file|awk?-F?"/"?'?
????{?for(i=1;i<nf;i++)?< span="">
????{?if(i==NF-1)?{?printf?"%s",$i?}?
????else?{?printf?"%s/",$i?}?}}'???????????????顯示一個文件的全路徑。?
????用for和if顯示日期?
????awk??'BEGIN?{?
for(j=1;j<=12;j++)?
{?flag=0;?
??printf?"\n%d月份\n",j;?
????????for(i=1;i<=31;i++)?
????????{?
????????if?(j==2&&i>28)?flag=1;?
????????if?((j==4||j==6||j==9||j==11)&&i>30)?flag=1;?
????????if?(flag==0)?{printf?"%02d%02d?",j,i}?
????????}?
}?
}'?
19、在awk中調用系統變量必須用單引號,如果是雙引號,則表示字符串?
Flag=abcd?
awk?'{print?'$Flag'}'???結果為abcd?
awk?'{print??"$Flag"}'???結果為$Flag
轉載于:https://www.cnblogs.com/virusolf/p/5453296.html
總結
以上是生活随笔為你收集整理的awk用法小结(作者总结)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内娱所有帝中只服吴京,没有拼盘,一番票房
- 下一篇: androidstudio新建项目中在布