awk pattern { action } {filenames} # $0變量是指整條記錄,$1表示當前行的第一個域,$2表示當前行的第二個域,$n當前記錄的第n個域,字段間由FS分隔, 每行按 FS 字段分隔符(默認是空格或tab) # cat 1.txt Beth 4.00 0 Dan 3.75 0 kathy 4.00 10 Mark 5.00 20 Mary 5.50 22 Susie 4.25 18 # 輸出文本中的1、3列 awk '{print $1,$3}’ 1.txt Beth 0 Dan 0 kathy 10 Mark 20 Mary 22 Susie 18 # $NF是number finally,表示最後一列的信息 awk '{print $NF}' 1.txt 0 0 10 20 22 18 # 篩選 第三列等於0的第一列的值 awk '$3 == 0 {print $1}' 1.txt Beth Dan # -F 指定輸入文件折分隔符 cat 2.txt # 2.txt Beth:4.00:0 awk -F ':' '{print $2}' 2.txt 4.00 # 打印出每行的行號NR代表行號 awk '{print "我是行號",NR,$0}' 1.txt 我是行號 1 Beth 4.00 0 我是行號 2 Dan 3.75 0 我是行號 3 kathy 4.00 10 我是行號 4 Mark 5.00 20 我是行號 5 Mary 5.50 22 我是行號 6 Susie 4.25 18 # BEGIN 和 END # BEGIN 用於匹配第一個輸入文件的第一行之前的位置, END 則用於匹配處理過的最後一個文# 件的最後一行之後的位置 awk 'BEGIN { print "標題一標題二 標題三"; print "-------------------"} { print}' 1.txt 標題一標題二 標題三 ------------------- Beth 4.00 0 Dan 3.75 0 kathy 4.00 10 Mark 5.00 20 Mary 5.50 22 Susie 4.25 18 # 打印最後一行 等同於 tail -n 1 1.txt 等同於 sed -n '$p' 1.txt awk 'END { print $0}' 1.txt Susie 4.25 18 # 設置變量 awk '{tail=($1 "~~~~~")} {print tail}' 1.txt Beth~~~~~ Dan~~~~~ kathy~~~~~ Mark~~~~~ Mary~~~~~ Susie~~~~~ # for循環 每行打印2遍 awk '{for(i=0; i < 2; i++) print $0}' 1.txt Beth 4.00 0 Beth 4.00 0 Dan 3.75 0 Dan 3.75 0 kathy 4.00 10 kathy 4.00 10 Mark 5.00 20 Mark 5.00 20 Mary 5.50 22 Mary 5.50 22 Susie 4.25 18 Susie 4.25 18 # 逆序打印 awk '{arr[NR] = $0 }END{for(i = NR;i >0;i --) print arr[i]}' 1.txt Susie 4.25 18 Mary 5.50 22 Mark 5.00 20 kathy 4.00 10 Dan 3.75 0 Beth 4.00 0 # 去重複行 awk '!($0 in x){x[$0];print $0 }' 1.txt # 其他: https://www.gnu.org/software/gawk/manual/gawk.html#Advanced-Features