AWK工具的用法
基本格式
awk '{commands}' filename
或者stdin | awk '{commands}'
以下,均簡(jiǎn)寫為awk '{commands}'的形式
commands的用法
commands逐行作用于文本流
- $1當(dāng)前行第一列數(shù)據(jù),$NF最后列,$(NF-1)即倒數(shù)第二列
awk '{print $(NF-1)}'
# 補(bǔ)充說(shuō)明:
$0 當(dāng)前行所有列
NR 當(dāng)前行號(hào)
NF 當(dāng)前行字段數(shù) - print默認(rèn)結(jié)尾換行;printf不換行
awk '{printf $1}' - 多條語(yǔ)句以分號(hào)間隔
awk '{printf $1; print $(NF-1)}' - 多個(gè)參數(shù)以逗號(hào)間隔,打印后以空格間隔
awk '{print $1, $2, $3}' - 空格會(huì)被忽略不計(jì)
awk '{print $1 $2}'
打印結(jié)果這兩個(gè)參數(shù)會(huì)被[字符拼接] - 雙引號(hào)拼接字符
awk '{print $1 ":" $2}'
打印結(jié)果是這兩個(gè)參數(shù)用冒號(hào)連接
# 補(bǔ)充說(shuō)明
外層的單引號(hào)也可以用雙引號(hào),
此時(shí)內(nèi)層拼接用單引號(hào) - 通過(guò)for循環(huán)打印范圍列
awk '{for(i=9;i<NF;i++) printf $i"\t"; print ""}'
以分號(hào)制造了兩個(gè)語(yǔ)句
1. 循環(huán)語(yǔ)句僅作用于緊跟著的打印語(yǔ)句
2. 循環(huán)完成后執(zhí)行print語(yǔ)句換行 # 補(bǔ)充說(shuō)明
如果for循環(huán)內(nèi)有多條語(yǔ)句,必須使用大括號(hào)括起來(lái):
awk '{
for(i=9;i<NF;i++){printf $i; #此處分號(hào)不可以省略print "\t"}; #此處分號(hào)可以省略
print ""; #此處分號(hào)不可以省略
print ""
}' - 通過(guò)條件判斷執(zhí)行打印
方法一: 條件操作語(yǔ)句(和for循環(huán)用法一致)
awk '{if($9>=100 && $10>=50)printf $9;print ""}'
使用多條語(yǔ)句:
awk '{if($9>=100 && $10>=50){printf $9;printf "\t"$10}else if($9<100 && $10 >=50){printf "$10"}else{print "it\'s ok"}
}'
方法二: 條件模式
awk自帶三個(gè)條件模式:前面講的所有均為中間的commands:
awk 'BEGIN {COMMANDS1} pattern {commands} END {COMMANDS2}'實(shí)例:awk '$9>=100||$10>=2{print $9"\t"$10}'
第九列值大于100且第十列值大于2時(shí),打印這兩個(gè)值awk '!/CrowdApp/ && $9>=50 {print $9"\t"$10}'
包含CrowdApp字段,且第九個(gè)字段大于50時(shí),打印xxxawk 'NR==5,NR==10{print $0}'
打印5-10行的所有值 - BEGIN和END
awk 'BEGIN{ i=0 } /CrowdApp/ {print $0;i++} END{print $i}'# 補(bǔ)充說(shuō)明
BEGIN在執(zhí)行awk所有命令前先執(zhí)行一次;
patterns內(nèi)的command每一行都會(huì)執(zhí)行一次;
END只有在執(zhí)行完所有語(yǔ)句后執(zhí)行一次。 - awk參數(shù)傳遞
方法一:
awk -v var=$pwd '{print var}'
方法二:
awk '{print v1, v2}' v1=$VAR1, v2=$VAR2 - 指定字段分隔符
awk -F: '{print $NF}'
默認(rèn)以空格分割各個(gè)字段;此時(shí)指定冒號(hào)分割
轉(zhuǎn)載于:https://www.cnblogs.com/jiukun/p/9325512.html
總結(jié)
- 上一篇: 脚手架多少钱一平方啊?
- 下一篇: 中间件笔记