0

我有两个使用 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。我必须将这两个脚本合并为一个。谢谢你的帮助

4

2 回答 2

1

关于调用约定的注意事项:如果您正在运行脚本,因为awk -f script您不需要#!开头的 shabang ( ) 行。或者,您可以使用 shabang 运行它,就./script好像它script是可执行的一样。

回答

awkBEGINFILEand ENDFILE,用它们替换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
于 2012-08-22T08:20:00.970 回答
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

警告:未经测试。

于 2012-08-22T06:07:37.010 回答