awk
1.域和記錄:
取第一域,並在開頭和結尾加字符begin和end
通常使用BEGIN來顯示變量和預置變量,使用END來輸出最終結果。
awk ' BEGIN {print "being"} {print $1} END {print "end"}' file
2.條件操作符:
第一字域,包含expect,就打印整行
awk '{if($1~/expect/) print $0}' c.sh 或者 awk '$1~/expect/{print $0}' file
精確匹配:,只打印第3 域等於"48"的記錄
awk '$3=="48" {print $0}' file
不等於: awk '$1 != "asima"' temp
不匹配: 打印整條不包含ASIMA 的記錄
awk '$0 !~ /ASIMA/' temp
小於: awk '{if ($1<$2) print $1 "is smaller"}' temp
設置大小寫: awk '/[Gg]reen/' temp 打印整條包含Green,或者green 的記錄
任意字符: awk '$1 ~/^...a/' temp 打印第1 域中第四個字符是a 的記錄,符號’^’
代表行首,符合’.’代表任意字符
AND 與關系: awk '{if ( $1=="a" && $2=="b" ) print $0}' temp
OR 或關系: awk '{if ($1=="a" || $1=="b") print $0}' temp
for循環
awk -F "," '{for (i=1;i<=NF;i++) if($i~/a=/) {print $i}}'
3.awk內置變量:
例: awk 'END {print NR}' temp 在最后打印已讀記錄條數
awk '{print NF,NR,$0} END {print FILENAME}' temp
awk '{if (NR>0 && $4~/Brown/) print $0}' temp 至少存在一條記錄且包含Brown
NF 的另一用法: echo $PWD | awk -F/ '{print $NF}' 顯示當前目錄名
4. awk操作符:
在awk 中使用操作符,基本表達式可以划分成數字型、字符串型、變量型、域及數組元素
設置輸入域到變量名:
awk '{name=$1;six=$3; if (six=="man") print name " is " six}' temp
域值比較操作:
awk 'BEGIN {BASE="27"} {if ($4<BASE) print $0}' temp
修改數值域取值:(原輸入文件不會被改變)
awk '{if ($1=="asima") $6=$6-1;print $1,$6,$7}' temp
修改文本域:
awk '{if ($1=="asima") ($1="desc");print $1}' temp
只顯示修改記錄:(只顯示所需要的,區別上一條命令,注意{})
awk '{if ($1=="asima") {$1="desc";print$1}}' temp
創建新的輸出域:
awk '{$4=$3-$2; print $4}' temp
統計列值:
awk '(tot+=$3);END {print tot}' temp 會顯示每列的內容
awk '{(tot+=$3)};END {print tot}' temp 只顯示最后的結果
awk '{total+=$1}END{print total}' a.txt 只顯示最后的結果
文件長度相加:
ls -l|awk '/^[^d]/ {print $8"\t"$5} {tot+=$5} END{print "totKB:" tot}'
只列出文件名:ls -l|awk '{print $9}' 常規情況文件名是第8域
5.awk打印除了第二列外所有列
cat /etc/passwd|awk -F: '{$2=null;print $0}' 就是把某一列制空
6. awk 打印奇數行和偶數行
awk 'NR%2' b.log 打印奇數行
awk '!(NR%2)' b.log 打印偶數行
7. awk多個分隔符進行摘取列
cat file|awk -F[//\ ] '$9 ~/500/ {print $3,$5,$6,$8}' 分隔符分別為/ / 空格