精通awk系列(10):awk篩選行和處理字段的示例


回到:linux


awk數據篩選示例

篩選行

# 1.根據行號篩選
awk 'NR==2' a.txt   # 篩選出第二行
awk 'NR>=2' a.txt   # 輸出第2行和以後的行

# 2.根據正則表達式篩選整行
awk '/qq.com/' a.txt       # 輸出帶有qq.com的行
awk '$0 ~ /qq.com/' a.txt  # 等價於上面命令
awk '/^[^@]+$/' a.txt      # 輸出不包含@符號的行
awk '!/@/' a.txt           # 輸出不包含@符號的行

# 3.根據字段來篩選行
awk '($4+0) > 24{print $0}' a.txt  # 輸出第4字段大於24的行
awk '$5 ~ /qq.com/' a.txt   # 輸出第5字段包含qq.com的行

# 4.將多個篩選條件結合起來進行篩選
awk 'NR>=2 && NR<=7' a.txt 
awk '$3=="male" && $6 ~ /^170/' a.txt       
awk '$3=="male" || $6 ~ /^170/' a.txt  

# 5.按照範圍進行篩選 flip flop
# pattern1,pattern2{action}
awk 'NR==2,NR==7' a.txt        # 輸出第2到第7行
awk 'NR==2,$6 ~ /^170/' a.txt

處理字段

修改字段時,必定要注意,可能帶來的聯動效應:即便用OFS重建$0。面試

awk 'NR>1{$4=$4+5;print $0}' a.txt
awk 'BEGIN{OFS="-"}NR>1{$4=$4+5;print $0}' a.txt
awk 'NR>1{$6=$6"*";print $0}' a.txt

awk運維面試試題

從ifconfig命令的結果中篩選出除了lo網卡外的全部IPv4地址。正則表達式

# 1.法一:多條件篩選
ifconfig | awk '/inet / && !($2 ~ /^127/){print $2}'

# 2.法二:按段落讀取,而後取IPv4字段
ifconfig | awk 'BEGIN{RS=""}!/lo/{print $6}'

# 3.法三:按段落讀取,每行1字段,而後取IPv4字段
ifconfig | awk 'BEGIN{RS="";FS="\n"}!/lo/{$0=$2;FS=" ";$0=$0;print $2}'
相關文章
相關標籤/搜索