回到: "Linux系列文章" "Shell系列文章" "Awk系列文章" awk數據篩選示例 篩選行 awk運維面試試題 從ifconfig命令的結果中篩選出除了lo網卡外的所有IPv4地址。 ...
回到:
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}'