awk 一些实用的用法
在awk中 ,需要注意以下的几个简写
$0 ? ?//显示所有
$1 ? ?//显示第一列
$2 ? ?//显示第二列
以此类推
?
?
awk '{print $1,$2}' /etc/fstab ? ? ?
显示/etc/fstab文件的 第一, 第二列
?
awk 'BEGIN {print "yes,this is begining\n"} {print?$1,$2}' /etc/fstab ??
显示/etc/fstab文件的 第一, 第二列,并在开头的地方加上指定的语句
?
?
awk 'END {print "yes,this is begining\n"} {print?$1,$2}' /etc/fstab ??
显示/etc/fstab文件的 第一, 第二列,并在尾部的地方加上指定的语句
?
awk '{if($2~/roc/) print $0}' /etc/fstab
精确查找,寻找在/etc/fstab中 第二列 含有 roc 字符的 字符,并输出整行
可以理解为 如果$2 匹配 roc 则打印出整行
?
等同于?
awk '$2~/roc/' /etc/fstab
?
awk '$2=="\/proc" {print $0}' /etc/fstab
查找第二列等于 /proc ,并输出整行
?
awk '$2!=="/proc" {print $0}' /etc/fstab
加上!表示取反,也就输出除开第二列是/proc的所有行
?
?
awk '$0~/[Pp]ro/ {print $1,$2 "hello word"}' /tmp/test?
[]表示只要匹配里面内容任意一个即可或是没有匹配到里面的内容
?
?
awk '{if($5>0) print $0 "yes"}' /tmp/test?
如果第五列的值大于 0 则输出所有,并在尾部加上字符串 yes
?
?
awk '{if($0~/(pts|log)/) print $0}' /tmp/test?
等同于
awk '$0~/(pts|log)/' /tmp/test
匹配整行是否含有pts或是log字符
?
awk '{if($2~/(pts|log)/ && $3=="devpts") print $0}' /tmp/test?
加多一个相与的条件
?
NR打印出文件的记录个数
awk '{print $0} END {print "count:" NR}' /tmp/test ??
可在最后打印出有多少行
?
NF 表示有多少列
?
?
echo $PWD | awk -F/ ' {print $NF}'
$PWD 为linux的内置变量,其值为当前路径,
-F/ 表示以/为分隔符
$NF 表示为最后一个元素
最终的结果是取出当前的文件夹名字
echo $PWD | awk -F/ ' {print $2}' ?//则表示 获取的是第二个元素?
?
ll /aclog/bugreport/ |awk '{if($1~/-/) print $NF}'?
获取指定目录下第一列 含有 - 字符的 文件名
?
ll | awk 'BEGIN {NUM=17} {if($7>NUM) print $9}'
先在 BEGIN中定义一个变量
?
ll |awk '{$10=$7+1;print $0}'
本来是没有第10列的,然后新增一个域,且值为 $7+1
?
ll |awk '{total+=$7;print $7};END {print "total:" total}'
统计第7列的总和,并在结尾打印出来
?
?
?
awk 'gsub(/none/,"hehe")' /tmp/test?
替换,gsub(r,s) ,s替换r
?
sed 's/none/hehe/' /tmp/test?
以上两句话的作用差不多,但是awk只显示含有none的行,sed则会显示所有行
?