- $0存储整行,NF给出一行的字段数,NR是当前的行数:echo -e "1 2 3\n4 5 6"|awk 'NF<=3 {print $1 NR}'
- awk使用选项 -v 调用shell变量:a=1; b=2; echo -e "1\n2"|awk -v x=$a -v y=$b '$1==x {print $0 y}' #每调用一次shell变量,都要加一个-v参数;
- awk把linux文本文件转化成windows文本文件,linux文本文件默认的换行符是 \n,windows文本文件默换行符为 \r\n : awk 'BEGIN{ORS="\r\n"} {print}' linux.txt>windows.txt
- 指定文件中的行:awk 'NR>=2&&NR<=10 {print}' file
- 对文本z指定列求和:
awk 'BEGIN {sum=0};{sum += $1};END {print sum}' file
对符合某些条件的行按列求和:awk 'BEGIN {sum=0}; /RE/ {sum += $2};END {print sum}'
- awk -v RS="" '{print $(NF)}' file,显示最后一行
awk -v RS="" '{print $(NF-1)}' file,显示倒数第二行
awk -v RS="" '{print $(NF-2)}' file,显示倒数第三行 -
awk 去除第一行和最后一行
awk 'NR>2{print p}{p=$0}' urfile
第一行时, NR=1, 不执行print, p=第一行的内容
第二行时, NR=2, 不执行print, p=第二行的内容
第三行时, NR=3, 执行print p,此时p=第二行的内容, 即打印第二行, 然后p=第三行
............
最后一行时, 执行print p, 打印倒数第二行, 然后p=最后一行
也就是去除了第一行和最后一行 -
awk '{sub(/good/,"bad"); print $0}'只把每行的第一个good替换为bad
awk '{gsub(/good/,"bad"); print $0}'把每一行的所有good替换为bad
sed '/fell/ s/good/bad/g'
awk '{if(/fell/) gsub(/good/,"bad"); print $0 }'只在出现字符串fell字符串的前提下,将找到的行中的good替换为bad
sed '/fell/ !s/good/bad/g'
awk '{if(!/fell/) gsub(/good/,"bad"); print $0 }'只在不出现字符串fell字符串的前提下,将找到的行中的good替换为bad
sed 's/good/bad/g;s/fell/bad/g;s/sun/bad/g'
sed 's/good\|fell\|sun/bad/g'
awk '{gsub(/good|fell|sun/,"bad") ; print $0}'不管是good、fell还是sun,一路替换为bad