【问题标题】:Data processing AWK数据处理 AWK
【发布时间】:2015-08-18 22:40:44
【问题描述】:

我创建了一个 shell 脚本,它根据我在控制台中编写的输入文件过滤某些数据。但是现在我有大约 30 个文件要过滤,我想知道是否可以将所有需要过滤的文件 (PATH) 写入 .txt 文件中,并在主 awk 文件中调用它来过滤每个文件在控制台中一一输入。

问候。

awk -f "filter.awk" data.txt

data.txt 应该有文件名: prueba1.tr prueba2.tr . . prueba30.tr

awk 中的过滤器应该读取 data.txt 中的每个文件。如果存在匹配项,则继续打开文件并处理其中的数据。目前,我只是使用 if(ARGV[1]=="name of the file.tr") {proceed with the filtering process} 但我有大约 30 个文件,我想稍微自动化一下。

感谢您的建议

【问题讨论】:

  • 是的,你可以。如果这不是您想要的答案,请编辑您的问题,以举例说明您在问什么。
  • 你好@EdMorton,我该怎么做?我一直在尝试,但总是得到一个空文件。
  • 正如我所说,编辑您的问题以阐明您的要求并提供示例输入和预期输出。

标签: awk


【解决方案1】:
$ cat file1
foo
$ cat file2
bar
$ cat data.txt
file1
file2

$ awk 'NR==FNR{ARGV[ARGC]=$0; ARGC++; next} {print FILENAME, $0}' data.txt
file1 foo
file2 bar

或者如果您愿意(效率更高一点,因为 NR==FNR 没有针对每个文件的每一行进行测试):

$ awk -v list="data.txt" 'BEGIN{ while ( (getline line < list) > 0 ) { ARGV[ARGC]=line; ARGC++ } close(list) } {print FILENAME, $0}'
file1 foo
file2 bar

【讨论】:

    【解决方案2】:

    是的,如果files.txt 有你的文件列表,而yourCommand.sh 是你的脚本,它接受一个文件作为参数,你可以这样做

    cat files.txt | xargs -L 1 yourCommand.sh
    

    这将一一输入files.txt 到yourCommand.sh 的每一行。它不使用awk,但我认为它完成了你想要的。

    注意:我不在乎它是“无用的猫”

    【讨论】:

      【解决方案3】:

      awk 可以接受多个输入文件并一个一个地进行处理。如果您想将输出收集到同一个文件中,这是一个典型的 awk 用例。

      例如,如果您将脚本运行为

      awk -f script.awk inputfile > outputfile
      

      您可以扩展到多个文件

      awk -f script.awk inputfile1 inputfile2 ... > outputfile
      

      或者,如果使用标准命名

      awk -f script.awk inputfile{1..30} > outputile
      

      或者,你所有的文件都在一个目录中

      awk -f script.awk inputfiles/* > outputile
      

      等等,

      如果您希望每个输入文件有一个输出,则需要在脚本中进行重定向。由于我们不知道您的脚本是什么,我将介绍一个简单的案例。

      例如,这会将索引为 1 到 30 的输入文件的标题(第一行)打印到相应的输出文件中

      awk 'FNR==1{print > FILENAME".out"}' inputfiles{1..30}
      

      【讨论】:

      • 你好@shellter。我试图按照你告诉我的去做,但是其他文件的所有信息,甚至是它自己的信息都记录在第一个输出文件中。我不知道这是否会发生在循环中。
      • 对于多个输出文件,您必须修改脚本并在那里进行重定向。正如我上面试图解释的,这仅适用于单个输出文件。
      • @karakfa:对不起,我错过了您需要每个列出的输入文件的单独输出。所以awk 'FNR==1{print &gt; FILENAME".out"}' $(cat list.txt) 应该可以工作,每个 karakfa 有充分理由的答案。这假定list.txt 中包含的文件名中没有空格。祝大家好运!
      猜你喜欢
      • 2014-06-14
      • 2021-05-13
      • 2021-06-23
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2019-07-05
      相关资源
      最近更新 更多