【1.1.3】awk命令
阿新 • • 發佈:2018-11-25
awk指令碼基本結構
awk 'BEGIN{print "start"} pattern {commands} END{print "ends"}' file #執行過程 awk 'BEGIN {commands} pattern{commands}END{commands}' filename [1]第一步:執行BEGIN{commands} 語句塊中的語句; [2]第二步:從檔案或標準輸入(stdin)讀取一行,然後執行pattern{commands}語句塊,它逐行掃描檔案,第一行到最後一行重複這個過程,直到檔案全部被讀取完畢; [3]第三步:當讀至輸入流末尾時候,執行END{commands}語句塊
常用格式
awk [-F field-separator] 'commands' inputfile
其他引數
$0:表示整個當前行
NF:每行行的欄位數
NR:每行的記錄號
OFS:輸出欄位分隔符
按指定分隔符分割並提取所有欄位
[[email protected] test]$ awk -F"\t" '{print $0}' test.txt
wu M 23 JX 20181111
LIU F 22 XA 20151213
JIANG M 33 AH 20161121
提取指定欄位列
#中間加逗號,欄位使用空格分割
[[email protected] test]$ awk -F"\t" '{print $1,$2}' test.txt
wu M
LIU F
JIANG M
#中間沒有逗號,欄位相連輸出不分割
[[email protected] test]$ awk -F"\t" '{print $1 $2}' test.txt
wuM
LIUF
JIANGM
加入表頭並提取指定欄位
[[email protected] test]$ awk -F"\t" 'BEGIN {print "name gender"} {print $1,$2}' test.txt name gender wu M LIU F JIANG M
根據條件篩選行
#輸出第一行
[email protected] test]$ awk -F'\t' 'NR==1{print $0}' test.txt
wu M 23 JX 20181111
#輸出第一行和第三行
[[email protected] test]$ awk -F'\t' 'NR==1||NR==3{print $0}' test.txt
wu M 23 JX 20181111
JIANG M 33 AH 20161121
#帶行號輸出
[[email protected] test]$ awk -F'\t' 'NR==1||NR==3{print NR, $0}' test.txt
1 wu M 23 JX 20181111
3 JIANG M 33 AH 20161121
#輸出欄位數
[[email protected] test]$ awk -F'\t' 'NR==1||NR==3{print NR,NF,$0}' test.txt
1 5 wu M 23 JX 20181111
3 5 JIANG M 33 AH 20161121
#不輸出第一行
[[email protected] test]$ awk -F'\t' 'NR!=1{print $0}' test.txt
LIU F 22 XA 20151213
JIANG M 33 AH 20161121
#輸出偶數行
[[email protected] test]$ awk -F'\t' '{if(NR%2==0)print $0}' test.txt
LIU F 22 XA 20151213
#輸出奇數行
[[email protected] test]$ awk -F'\t' '{if(NR%2==1)print $0}' test.txt
wu M 23 JX 20181111
JIANG M 33 AH 20161121
#保留第一行並輸出偶數行
[[email protected] test]$ awk -F'\t' 'NR==1||NR%2==0{print $0}' test.txt
wu M 23 JX 20181111
LIU F 22 XA 20151213
#輸出時指定分隔符
[[email protected] test]$ awk -F'\t' 'BEGIN{OFS=";"} NR==1||NR%2==0 {print $1,$2}' test.txt
wu;M
LIU;F