41 awk (三)

2016-10-30  本文已影响49人  StarShift

awk 高级输入输出

读取下一条记录
root@ubuntu:~# awk 'NR%2==1{next}{print NR,$0;}' cats.txt 
2   my cat's name is betty
4   my dog's name is frank
6   my fish's name is george
8   my goat's name is adam

分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行:

cat web.txt 
web01[192.168.2.100]
 httpd ok 
 tomcat ok 
 sendmail ok 
web02[192.168.2.101] 
 httpd ok 
 postfix ok 
web03[192.168.2.102] 
 mysqld ok 
 httpd ok
root@ubuntu:~# awk '/^web/{T=$0;next;}{print T":\t"$0;}' web.txt 
web01[192.168.2.100]:    httpd ok 
web01[192.168.2.100]:    tomcat ok 
web01[192.168.2.100]:    sendmail ok 
web02[192.168.2.101] :   httpd ok 
web02[192.168.2.101] :   postfix ok 
web03[192.168.2.102] :   mysqld ok 
web03[192.168.2.102] :   httpd ok
getline 函数

awk getline用法:输出重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。

root@ubuntu:~# awk 'BEGIN{ "date" | getline out; print out }' test
Sat Oct 29 12:10:45 PDT 2016
root@ubuntu:~# awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test 
Oct
root@ubuntu:~# awk 'BEGIN{ while( "ls" | getline) print }' 
1
1n
1.txt
cats.txt
herpets.txt
html.txt
my.txt
nohup.out
pets.txt
pet.txt
web.txt
上一篇 下一篇

猜你喜欢

热点阅读