Linux awk

作者: 歌哥居士 | 来源:发表于2019-03-28 08:45 被阅读0次

语法

$ awk [options] 'command' file(s)
options:
  -F 指定分隔符,默认为空格。
  -f 执行一个脚本文件:awk -f awk-script-file file(s)
command:
  [pattern:正则表达式、逻辑判断式]
  {awk操作命令:print printf getline if else while}

示例

内置变量:01 2 ...0: 表示整个当前行
1 : 每行第一个字段2 : 每行第二个字段

$ awk -F ':' '{print $1}'  passwd
root
......
user000
mysql

$ awk -F ':' '{print $1,$3}' passwd
nobody -2
root 0
daemon 1
......

$ awk -F ':' '{print "User:"$1 "\t" "UID:"$3}' passwd
User:nobody UID:-2
User:root   UID:0
User:daemon UID:1


$ awk -F ':' '{if ($3 > 260) print "User:"$1"\t""UID:"$3}' passwd
User:_hidd  UID:261
User:_cmiodalassistants UID:262
User:_analyticsd    UID:263
User:_fpsd  UID:265
User:_timed UID:266


$ awk -F ':' '/root/{print $0}' passwd
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false

#注意'\'左右不要有空格,文件名要写在最后一行command后面
$ awk -F ':' 'BEGIN{count=0}'\
> '{if ($3 > 100) name[count++]=$1}'\
> 'END{for(i=0;i<count;i++) print i,name[i]}' passwd
0 _softwareupdate
1 _coreaudiod
2 _screensaver
... ...

内置变量:NR NF FILENAME
NR 每行记录号
NF 字段数量
FILENAME 处理的文件名

$ awk -F ':' '{print FILENAME,NR,NF}' passwd
passwd 1 7
passwd 2 7
passwd 3 7
passwd 4 7
passwd 5 7

$ awk -F ':' '{printf("Line:%3s  Col:%s  User:%s\n",NR,NF,$1)}' passwd
Line:  1  Col:7  User:nobody
Line:  2  Col:7  User:root
Line:  3  Col:7  User:daemon

匹配正则表达式&逻辑表达式
匹配正则表达式:、!
逻辑表达式:==,!=,<,>

$ awk -F ':' '$1~/^r.*/{print $0}' passwd
root:*:0:0:System Administrator:/var/root:/bin/sh

$ awk -F ':' '$1=="root"{print $0}' passwd
root:*:0:0:System Administrator:/var/root:/bin/sh

$ awk -F ':' '$3>250{print $0}' passwd
_xserverdocs:*:251:251:macOS Server Documents Service:/var/empty:/usr/bin/false
_wwwproxy:*:252:252:WWW Proxy:/var/empty:/usr/bin/false
_mobileasset:*:253:253:MobileAsset User:/var/ma:/usr/bin/false
......

扩展表达式:BEGIN、END

$ awk -F ':' 'BEGIN{print "Line  Col  User"} {print NR"    "NF"    "$1} END{print "==========="FILENAME"==========="}' passwd
Line  Col  User
1    7    nobody
2    7    root
......
98    7    _timed
===========passwd===========


#统计大小
$ ls -l | awk 'BEGIN{size=0} {size+=$5} END{print "size is " size/1024/1024"mb"}'
size is 81.07mb

$ du -sh
 81M    .


$ awk -F ':' '$1~/root|daemon/{sum[$1]++} END{for (i in sum) print i,sum[i]}' passwd
root 1
_cvmsroot 1
daemon 1

相关文章

网友评论

      本文标题:Linux awk

      本文链接:https://www.haomeiwen.com/subject/qatfvqtx.html