经常需要在awk中调用其他小程序,一般都是通过system调用来完成,但是用system调用的时候无法获取被调用程序的输出,那如何将一个程序的输出赋值给awk变量呢?答案就是通过getline!
CodingAnts@ubuntu:~/awk$ awk 'BEGIN{"pwd" | getline dir; print dir}' /home/CodingAnts/awk
执行linux的pwd命令,并通过管道输出给getline,再把输出值赋值给awk变量dir,最后打印出变量dir。这样,就实现了将程序的输出值赋值给awk变量了。
关于如何将一个程序的输出值赋值给awk,总结下就是采用下述方式:
"需要执行的程序" | getline awk变量名
将上面蓝色和红色部分替换成自己需要的程序和变量名即可,例如上面示例中的程序即为pwd,变量为dir,为了加强印象,再举一例:
CodingAnts@ubuntu:~/awk$ date Fri Mar 23 21:39:05 PDT 2012 CodingAnts@ubuntu:~/awk$ awk 'BEGIN{"date" | getline d; split(d,a); print a[1]}' Fri
Linux中的date命令输出当前的日期信息,具体参见上面输出。上面的示例先执行Linux的date命令获取日期信息,通过管道输出给geiline,并赋值给awk的变量d,再以默认的空格为分割方式,将变量拆分到awk数组a中,数组a中每一项保存了date输出信息的一部分,a数组下标从1开始,要输出星期信息,则print a[1],如果需要输出其他信息,更改下标值即可。
转载请注明:Coding Ants » 如何将一个程序的输出赋值给awk变量?