1、awk '{print }' maillog 相关于 awk '{print $0}' maillog 相当于 cat
awk '/unknown/{print}' tmp.txt 匹配查询带有unknown 的行,相当于grep
awk '!/unknown/{print }' tmp.txt 打印不匹配正则表达式的行 ,相当于grep -v
awk '/unknown/{print x};{x=$0}' 打印匹配正则表达式的前一行,不打印当前行
awk '/unknown/{print (x=="" ? "match on line 1" : x)};{x=$0} ' 打印匹配正则表达式的前一行,不打印当前行
awk '/unknown/{getline;print}' tmp.txt 打印匹配正则表达式的后一行,不打印当前行
2、awk '1;{print ""}' maillog
awk 'BEGIN{ORS="\n\n"};1' maillog 每行后面添加一行空白行
awk '1;{print "\n"}' maillog 每行后面添加两行空白行
3、Apr 20 14:31:14 fd01 postfix/qmgr[4372]: 5F46F24DC6A: from=<[email protected]>, size=2187, nrcpt=1
cat test.log |grep nrcpt |awk -F "=|," '{print $4}' 取字符'=’和',' 之间size大小部分
4、awk 'BEGIN { FS="[ :\t|]" } {print $1}' maillog 以 空格、冒号、tab、管道同时作为分割符
5、ls -l |awk ' {size=size+$5;} END{print "size is ", size}'
size is 5422624
ls -l |awk ' {size+=$5;} END{print "size is ", size}'
size is 5422624
ls -l |awk 'BEGIN {} {size=size+$5;} END{print "size is ", size}'
size is 5422624
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "size is ", size}'
size is 5422624 没初始化size默认是0,妥当做法将size初始化为0
ls -l |awk 'BEGIN {print "The file size"} {size=size+$5;} END{print "size is ", size}'
The file size
size is 5422624 统计目录下文件的字节数
6、awk 'NF > 6' 打印列数超过6的行
awk '{ field = $NF }; END{ print field }' tmp.txt 最后一行的最后一列
7、 awk '{print FNR " " $0}' test.log
awk '{print FNR "\t" $0}' test.log 每行前添加连续编号
awk '{print}' test.log |awk 'NF{$0=++a " " $0};{print}'
awk '{printf("%5d : %s\n", NR,$0)}' 添加编号
awk '{print (NF? ++a " :" :"") $0}'
8、 awk 'END{print NR}' tmp.txt 文件行数的统计(cat tmp.txt |wc -l)
9、 awk '{print NF}' test.log |awk '{sum+=$1}END{print sum}'
awk '{ total = total + NF }; END {print total}' tmp.txt 文件区域之和
10、 awk '/11336/{n++}; END {print n}' tmp.txt 文件中包涵关键字‘11336’ 的行有多少
cat tmp.txt |grep 11336 |wc -l
11、awk '{sub(/fd01/,"sex");print}' tmp.txt 用sex 替换fd01 subsitution 替换
awk '{gsub(/fd01/,"sex");print}' tmp.txt 用sex 替换fd01 全部替换
awk '{sub(" ","|");print}' tmp.txt 用"|" 替换空格“ ”
12、RS:Record Separator 记录分隔符 ORS:Output Record Separate 输出记录分隔符 (行列分隔符转换互逆过程)
FS:Field Separator 区域分隔符 OFS:Out of Field Separator 输出区域分隔符 (分隔符的替换过程)
a:RS让每个分隔符后面的内容重新变成一行
echo "a|b|c" |awk 'BEGIN{ RS="|"; } { print $0 }' 注释 a、b、c 都变成了一行
b:ORS可以看成RS的逆向过程,将“换行符号”替换成你想要的符号,
awk 'BEGIN{ ORS="----" }{ print $0 }' tmp.txt 注释换行符变成了“----”
c:FS字段分隔符 相当于awk -F
echo "a**b**c" |awk 'BEGIN{FS="**";}{print $1,$2,$3}' 结果 a b c
d: echo "a----b----c" |awk 'BEGIN{ FS="----";OFS="*****" }{ print $1,$2,$3 }'
结果为a*****b*****c ,分隔符由---- 变成了*****
echo "a b c" |awk 'BEGIN{ OFS="*****" }{NF=NF ;print $1,$2,$3 }'
echo "a b c" |awk 'BEGIN{ OFS="*****" }{$1=$1; print $1,$2,$3 }'
结果a*****b*****c
13、awk '{sub(/^[ \t]+/,"");print}' tmp.txt 左对齐
awk '{ $2 = ""; print }' 删除第二列
awk '{sub(/[ \t]+$/, "");print}' tmp.txt 删除每行结尾的空白
awk '{gsub(/^[ \t]+|[ \t]+$/,"");print}' 删除开关和结尾的空白
awk '{NF=NF;print}' tmp.txt 删除每列之间的空白
awk '{$1=$1;print}' tmp.txt 删除每列之间的空白
awk '! a[$0]++' tmp.txt 删除重复行
awk '!($0 in a) {a[$0];print}' tmp.txt 删除重复行
awk NF tmp.txt 删除空白行
awk '/./' tmp.txt 删除空白行
awk '{sub(/^/, "sex");print}' tmp.txt 每行前插入字符sex
awk '{sub(/^/," ");print}' tmp.txt 每行前插入字符" "
awk '{printf "%16s\n", $0}' tmp.txt 宽度为16右对齐
awk '/nect/{gsub(/fd01/, "sex")};{print}' tmp.txt
包含 "nect" 的行里,将 "fd01" 替换为 "sex"
awk '!/nect/{gsub(/fd01/, "sex")};{print}'
不包含 "nect" 的行里,将 "fd01" 替换为 "sex"
awk '{gsub(/fd01|bounce|sent/, "sex"); print}' 将多项字符替换成"sex"
14、awk 'NR < 3' tmp.txt 打印文件前两行,相当于head -2
awk 'END{print}' 打印文件最后一行,相当于 tail -1
awk '{y=x "\n" $0; x=$0};END{print y}' tmp.txt 打印文件最后两行,相当于 tail -2
awk '{print}' tmp.txt |awk 'NR==1;END{print}' 打印第一行和最后一行
15、awk '/AAA/; /BBB/; /CCC/' tmp.txt 以任何顺序查找
awk '/AAA.*BBB.*CCC/' tmp.txt 以指定顺序查找
awk 'length > 100' tmp.txt 长度大于100的行
16、awk 'NR==8,NR==12' 打印8到12 (包涵8和12行)
awk 'NR==15' 打印第15行
awk 'NR==15 {print;exit}' 打印第15行 (高效大文件)