1. 程式人生 > >【1.1.3】awk命令

【1.1.3】awk命令

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