学习linuxjishu/13830.html target=_blank class=infotextkey>awk命令的技巧,重在实践,勤于练习,多用awk去分析处理数据文件,慢慢就会熟能生巧。
重点应放在awk命令参数选项,比如分隔符,Begin与end语句块,以及内置函数等知识点上。
1、显示第一次出现diglike到第一次出现redis的所有行.
2、打印以dig或root开头的行:
3、打印以d或m开头的用户
4、打印后两们是数字的用户
5、查找包含diglike的行,并将第三个域加100打印出来
6、匹配包含diglike的行,根据第三个域大小输出内容
7、变量赋值
8、域变量赋值
9、begin模块
diglike@LinuxGit:~$ awk 'BEGIN{FS=":";OFS="t";ORS="nn"}{print $1,$3}' /etc/passwd | head -3
root 0
daemon 1
10、打印标题
11、END模块
12、重定向:
13、管道:
$ awk 'BEGIN{"date"|getline d;split(d, mon);print mon[2]}'
Nov
$ awk 'BEGIN{while("ls"|getline) print}'
a
bin
Desktop
Documents
Dowell web
Downloads
examples.desktop
$ awk 'BEGIN{while(getline<"/etc/passwd">0) count++;print count}'
38
getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。
14、执行系统命令:
15、if语句
更简洁:
diglike@LinuxGit:~$ awk -F: '$3<$4{print $1}' /etc/passwd
sync
games
man
libuuid
syslog
messagebus
colord
lightdm
whoopsie
avahi-autoipd
avahi
kernoops
pulse
rtkit
saned
mongodb
redis
memcache
dnsmasq
if else
$ awk -F: '{if($3==$4) print $1 " yes";else print $1 " no"}' /etc/passwd
root yes
daemon yes
bin yes
sys yes
sync no
games no
man no
$ awk -F: '{if($3==$4){print $1 " yes"} else {print $1 " no"}}' /etc/passwd
更简洁的代码:
$ awk -F: '{print ($3==$4?$1 " yes":$1 " no")}' /etc/passwd | head -5
root yes
daemon yes
bin yes
sys yes
sync no
for while
diglike@LinuxGit:~$ awk 'BEGIN{i=1;while(i<=3) { print "Linux",i;i++ }}'
Linux 1
Linux 2
Linux 3
diglike@LinuxGit:~$ awk 'BEGIN{for(i=1;i<=3;i++) print "Linux",i }'
Linux 1
Linux 2
Linux 3