2017-03-02 52 views
-1

有人可以帮助理解如何解释/读取awk命令吗?awk:如何解释/读取下面的命令(该命令如何工作)

awk '/foo/{if (a ~ /abc/) print a; print} {a=$0}' file 

对于行的文件:

abc 0 
def 
abc 1 
foo 1 
ghi 
jkl 
foo 2 
foo 3 
mno 
abc 2 
foo 4 
foo 5` 

观察发现命令打印输出:

abc 1 
foo 1 
foo 2 
foo 3 
abc 2 
foo 4 
foo 5` 
+2

这是时间让你通一个'awk'教程工作。 (这是非常基本的东西,并为StackOverflow脱离主题)。查看http://grymoire.com/Unix/Awk.html。请阅读http://stackoverflow.com/help/how-to-ask,http://stackoverflow.com/help/dont-ask,http://stackoverflow.com/help/mcve并参加[tour]( http://stackoverflow.com/tour)在发布更多Q​​之前。祝你好运。 – shellter

+0

阅读Arnold Robbins编写的Effective Awk Programming第4版。它会解释脚本加上更多。同时 - 这是六个陈述,删除一些,移动它们,添加印刷品等,你很快就会发现它自己。 –

回答

2

可能有人请帮助了解如何解读/阅读awk 命令?

awk '/foo/{if (a ~ /abc/) print a; print} {a=$0}' file 

总之什么上面的命令是,它会搜索包含foo线,如果线找到,那么那么它会检查以前的读线(variable a)是否有abc,如果属实的话,它打印前行(that is variable a contents; print a),然后打印当前行(line which contains "foo"; print)。

说明如下:

awk '        # call awk 
    /foo/{       # if line/record/row contains "foo" then 

       if (a ~ /abc/)  # if variable a contains "abc" then 
          print a; # print contents of variable a 
       print    # print current record/row/line 
      } 
      { 
       a=$0    # save current record/line/row in variable a 
      } 
    ' file       # here you read file