awk是一行一行處理文本,當需要判斷當前處理行是否滿足特定條件時,需要從shell中輸入參數,然後放到awk的腳本命令中配合處理。
比如awk讀取shell的位置參數$1 ,如果直接放在awk命令中會與每行的第一個字段$1沖突,需要特殊處理。
例如有文件 iet.txt如下格式,需求是提取第一個字段或第二個字段為AA的行
AA BB CC DD EE FF
CC DD EE FF GG DD
...
腳本如下,保存為tiqu.sh
#!/bin/bash
sed '/^$/d' iet.txt|awk '{if(NF>3&&($1=="'$1'"||$2=="'$1'")){print $1","$2","$6 }}'
執行方法:
bash tiqu.sh AA
輸出結果:
AA BB FF
說明:
sed '/^$/d' iet.txt 去掉文本中的空行,然後awk判斷如果當前行字段大於三個且滿足條件就輸出第1,2,6列字段的值,用單引號隔離shell的變量,並且用雙引號包圍在shell變量的兩邊。
awk教程
普通的awk 命令格式
awk -F分隔符 'BEGIN { 初始化 } { 循環執行部分 } END { 結束處理 }' file
分隔符,BEGIN,END部分可以省略,默認分隔符是空格
簡化的awk格式
awk '{循環執行命令}' file
常用awk命令:
awk列求和
awk 'BEGIN{total=0}{total+=$1}END{print total}'
待完善... ,如果你有什麼好命令也可以留言給我