我想结合两个awk脚本

时间:2012-08-22 05:36:36

标签: linux awk

我有两个与AWK完美配合的

myScript3.awk

    #!/usr/bin/awk -f
    BEGIN {
        FS=">|</"
        OFS=","
    }
    {
     data[count++] = $2
     ptint $2
     }
    END{
       print data[2],data[6],data[3], FILENAME
    }

上面的脚本将扫描xml文档并返回第2,第6,第3个元素以及文件名。

    for filename in *.xml
    do 
        awk -f myscript3.awk $filename >> out.txt
    done

上面的脚本将扫描整个文件夹并列出xml文件,然后执行myscript。 我必须将这两个脚本合并为一个。 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

关于调用约定的注意事项:如果您将脚本作为awk -f script运行,则开头不需要shabang(#!)行。或者,如果./script可执行,则可以将shabang作为script运行。

<强>答案

awkBEGINFILEENDFILE,用它们替换BEGIN / END并将xml个文件作为参数,以下应该工作:

修改

正如丹尼斯在下面的评论中指出的那样,BEGINFILE没有必要。另请注意,这需要相当新版本的GNU awk才能正常工作。

<强> myScript3.awk

BEGIN {
  FS=">|</"
  OFS=","
}
{
  data[count++] = $2
  print $2
}
ENDFILE {
   print data[2],data[6],data[3], FILENAME
}

像这样运行:

awk -f myscript.awk *.xml

答案 1 :(得分:0)

#!/bin/bash
AWKPROG='BEGIN {FS=">|</" OFS=","}
{ data[count++] = $2; ptint $2 }
END {print data[2], data[6], data[3], FILENAME}'
for filename in *.xml;do awk $AWKPROG $filename; done >> out.txt

警告:未经测试。