awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法
例子
一般用法
#echo ‘this is war’ > Desktop/1.txt
#awk ‘{print $1 $2 $3}‘ Desktop/1.txt
结果:
thisiswar
-F(默认空格)
awk -F ‘is‘ ‘{print $1 $2 $3}‘ Desktop/1.txt
结果:
th war
OFS用法:($1~is 匹配含is的段落)
echo ‘this is war’|awk -F ‘:‘ ‘$1~is {OFS="#";print $1,$2}‘
结果:
this is war#
($1=="is" 匹配is)
echo ‘is‘|awk -F ‘:‘ ‘$0=="is" {OFS="#";print $1,$2}‘
结果:
is#
‘||’表示或 NR表示行号
awk -F ‘:‘ ‘$0~/home/ || NR>270 {OFS="#";print $1,$2}‘ ‘Desktop/1.txt‘
匹配/home/或大于行号270的段落
结果:
/home/jjj/.local/share/gvfs-metadata/root#
/home/jjj/.local/share/gvfs-metadata/root-2c6b185d.log#
/var/lib/dpkg/info/fakeroot.postrm#
/var/lib/dpkg/info/fakeroot.prerm#
/var/lib/dpkg/info/libfakeroot#amd64.conffiles
/var/lib/dpkg/info/libfakeroot#amd64.list
/var/lib/dpkg/info/libfakeroot#amd64.md5sums
/var/log/fsck/checkroot#
‘&&’表示并且
awk -F ‘:‘ ‘$0~/home/ && NR<10 {OFS="#";print $1,$2}‘ ‘Desktop/1.txt‘
不仅要包含/home/而且行号要小于10
结果:
/home/jjj/.local/share/gvfs-metadata/root#
/home/jjj/.local/share/gvfs-metadata/root-2c6b185d.log#
运算 例:$1=$2+$3
#cat Desktop/1.txt
1 2 3
4 5 6
7 8 9
#awk ‘$1=$2+$3 {print}‘ ‘Desktop/1.txt‘ (加)
5 2 3
11 5 6
17 8 9
#awk ‘$1=$2*$3 {print}‘ ‘Desktop/1.txt‘ (乘)
6 2 3
30 5 6
72 8 9
#awk ‘$1=$2/$3 {print}‘ ‘Desktop/1.txt‘ (除)
0.666667 2 3
0.833333 5 6
0.888889 8 9