目錄一、awk的基礎知識1.1 awk常用參數1.2 awk常用內置變量1.3 awk命令的特殊表達式1.4 awk使用格式:二、awk的基礎命令2.1 輸出文件中每行的第一個欄位2.2 輸出gggj文件中包含「good」的行2.3 輸出gggj文件包含「good」行的第一列2.4 以逗號為分隔符,輸出gggj的第一和第三列2.5 輸出第2行到第3行的內容,並且加上行號2.6 輸出第1列的內容,並且顯示出欄位數(總列數)2.7 通過FS修改分隔符,進行輸出2.8 通過OFS修改分隔符,輸出第一列和最後一列三、sed和awk聯用3.1 查看sed命令的結果3.2 默認分隔符,列印第四列3.3 以逗號為分隔符,列印第二列3.4 列印全部3.5 使用sort排序四、awk的較高級用法4.1 列印角色名和代表歌曲,中間用逗號隔開4.2 查找含有「Murong」的行,列印「第三列+第四列」4.3 使用「~」匹配4.4 使用「!~」反轉五、awk處理兩個文件5.1 NR和FNR5.1.1 兩個文件的分隔符相同5.1.2 兩個文件的分隔符不同5.2 合併5.3 查找缺失行號
awk的由來
awk是貝爾實驗室1977年搞出來的為Unix/Linux提供樣式掃描與處理工具,非常擅長處理結構化數據和生成表單。與sed 和grep 相似,但功能卻超過兩者,之所以叫awk是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。
awk指令與sed指令結構相同,都由模式和過程兩部分組成,但過程本身不同。awk為每個輸入行執行一套指令,也可以在命令行上指定指令或創建腳本文件,看上去更像一種程序設計語言。若想練習awk命令,可以在linux或mac下練習,windows可以下載Git Bash或者ubuntu子系統練習。
本文主要介紹了awk常用參數、內置變量和正確使用格式。還有awk的按需求列印,與sed連用和處理兩個文件等其他功能。
目錄一、awk的基礎知識
二、awk的基礎命令
三、awk與sed的結合
四、欄位的引用和分離
五、awk的較高級用法
awk [參數] 『命令』 文件
二、awk的基礎命令#查看文件gggj
$ cat gggj
Name, Color, Character/ Mom
Xiaosage, white, good/ hen
Heidashuai, black, bad/ hen
$
$ awk '{print $1}' gggj
Name,
Xiaosage,
Heidashuai,
$
$ awk '/good/' gggj
Xiaosage, white, good/ hen
$
$ awk '/good/{print $1}' gggj
Xiaosage,
$
$ awk -F, '{print$1;print$3}' gggj
Name
Character/ Mom
Xiaosage
good/ hen
Heidashuai
bad/ hen
$
$ awk 'NR==2,NR==3{print NR,$0}' gggj
2 Xiaosage, white, good/ hen
3 Heidashuai, black, bad/ hen
$
$ awk '{print $1,NF}' gggj
Name, 4
Xiaosage, 4
Heidashuai, 4
$
$ awk -v FS=',' ' {print $1}' gggj
Name
Xiaosage
Heidashuai
$
$ awk -F "," -v OFS='*****' '{print $1,$NF}' gggj
Name***** Character/ Mom
Xiaosage***** good/ hen
Heidashuai***** bad/ hen
$
#查看已經寫好的腳本文件eggs
$ cat eggs
s/white/flesh-coloured/
s/black/deep purple/
$
$ sed -f eggs gggj
Name, Color, Character/ Mom
Xiaosage, flesh-coloured, good/ hen
Heidashuai, deep purple, bad/ hen
$
$ sed -f eggs gggj| awk '{print $4}'
Mom
hen
bad/
$
$ sed -f eggs gggj | awk -F, '{print $2}'
Color
flesh-coloured
deep purple
$
$ sed -f eggs gggj | awk -F, '{print}'
Name, Color, Character/ Mom
Xiaosage, flesh-coloured, good/ hen
Heidashuai, deep purple, bad/ hen
$
$ sed -f eggs gggj | awk -F, '{print}' | sort
Heidashuai, deep purple, bad/ hen
Name, Color, Character/ Mom
Xiaosage, flesh-coloured, good/ hen
$
#查看文件yqlklxy
$ cat yqlklxy
Murong Yunhai,Chu Yuxun,Zhang Han,shiyi
Ye Shuo,Murong Yunduo,Wei Chen,fenshenqingren
Shangguan Ruiqian,xiaoyu,Zhu Zixiao,xiangniandege
Duanmu Lei,Yu xin,Yu Haoming,yigerendelangman
$
#查看腳本文件looklook
$ cat looklook
BEGIN { FS=","}
{print $1","$4}
$
通過變量FS改變欄位分隔符
$ awk -f looklook yqlklxy
Murong Yunhai,shiyi
Ye Shuo,fenshenqingren
Shangguan Ruiqian,xiangniandege
Duanmu Lei,yigerendelangman
$
#查看腳本文件cool
$ cat cool
/Murong/ {print $3"+"$4}
$
$ awk -F, -f cool yqlklxy
Zhang Han+shiyi
Wei Chen+fenshenqingren
$
#查看腳本文件dool
$ cat dool
$2~ /o/ {print $1"'s girlfriend is "$2"." }
$
$ awk -F, -f dool yqlklxy
Ye Shuo's girlfriend is Murong Yunduo.
Shangguan Ruiqian's girlfriend is xiaoyu.
$
*#查看腳本文件fool
$ cat fool
$2!~ /o/ {print $2"'s boyfriend is "$1"." }
$
$ awk -F, -f fool yqlklxy
Chu Yuxun's boyfriend is Murong Yunhai.
Yu xin's boyfriend is Duanmu Lei.
$
$ cat math1
sin0 sin1 sin2
cos0 cos1 cos2
tan0 tan1 tan2
$ cat math2
csc0 csc1 csc2
sec0 sec1 sec2
cot1 cot2 cot3
$
$ awk '{print NR,$0}' math1
1 sin0 sin1 sin2
2 cos0 cos1 cos2
3 tan0 tan1 tan2
$ awk '{print FNR,$0}' math1
1 sin0 sin1 sin2
2 cos0 cos1 cos2
3 tan0 tan1 tan2
$
$awk '{print NR,$0}' math1 math2
1 sin0 sin1 sin2
2 cos0 cos1 cos2
3 tan0 tan1 tan2
4 csc0 csc1 csc2
5 sec0 sec1 sec2
6 cot1 cot2 cot3
$ awk '{print FNR,$0}' math1 math2
1 sin0 sin1 sin2
2 cos0 cos1 cos2
3 tan0 tan1 tan2
1 csc0 csc1 csc2
2 sec0 sec1 sec2
3 cot1 cot2 cot3
$
$ cat pk1
1 2 3 4 5 6
11 22 33 44 55 66
111 222 333 444 555 666
$ cat pk2
7 8 9 10 J Q
77 88 99 100 JJ QQ
777 888 999 1000 JJJ QQQ
$
$ awk 'NR==FNR{tmp[FNR]=$2;} NR!=FNR{$2=tmp[FNR];print $0}' pk1 pk2>pk12
$ cat pk12
7 2 9 10 J Q
77 22 99 100 JJ QQ
777 222 999 1000 JJJ QQQ
$
$ cat pk1
1 2 3 4 5 6
11 22 33 44 55 66
111 222 333 444 555 666
$ cat pk3
9:10:J:Q:K:A
99:100:JJ:QQ:KK:AA
999:1000:JJJ:QQQ:KKK:AAA
$
$ awk 'BEGIN{FS="[: ]";OFS=":";}NR==FNR{tmp[FNR]=$2;} NR!=FNR{$2=tmp[FNR];print $0}' pk1 pk3>pk13
$
$ cat pk13
9:2:J:Q:K:A:
99:22:JJ:QQ:KK:AA:
999:222:JJJ:QQQ:KKK:AAA:
$
$ cat note1
1 You can you
2 No can no
$ cat note2
1 you up
2 no bb
$
$ awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print a[$1],$3}' note1 note2>note3
$ cat note3
1 You can you up
2 No can no bb
$
$ cat note4
1 Twinkle twinkle little star
2 How I wonder what you are
$ cat note5
1 Twinkle twinkle little star
2 How I wonder what you are
3 Twinkle twinkle little star
4 How I wonder what you are
$
$ awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if(!($1 in a))print $1}' note4 note5>note6
$
$ cat note6
3
4
$
sed 與 awk(第二版)【美】多尓蒂,【美】羅賓斯 著 張旭樂等譯
awk如何處理2個文件 純屬虛構
https://blog.csdn.net/fall221/article/details/8796692?utm_source=app&app_version=4.15.2
awk 合併兩個文件 EllieWong
https://blog.csdn.net/u014102846/article/details/69258170?utm_source=app&app_version=4.15.2
awk之NR==FNR問題 陳浩然MC
https://www.cnblogs.com/irockcode/p/7044722.html