【问题标题】:Extracting columns from multiple files into a single output file from the command line从命令行将多个文件中的列提取到单个输出文件中
【发布时间】:2014-12-08 04:28:02
【问题描述】:

假设我有一个包含 10 列的制表符分隔的数据文件。例如,使用 awk 很容易提取第 7 列,并将其输出到单独的文件中。 (例如,请参阅this question。)

如果我有 5 个这样的数据文件,我想从每个文件中提取第 7 列并创建一个包含 5 个数据列的新文件,每个输入文件的第 7 列对应一个?这可以从命令行使用 awk 和其他命令完成吗?

还是我应该写一个 Python 脚本来处理它?

【问题讨论】:

    标签: linux command-line awk


    【解决方案1】:

    如果数据足够小,可以将其全部存储在内存中,那么这应该可以:

    awk '{out[FNR]=out[FNR] (out[FNR]?OFS:"") $7; max=(FNR>max)?FNR:max} END {for (i=1; i<=max; i++) {print out[i]}}' file1 file2 file3 file4 file5
    

    如果不是,那么您将需要一些更高级的东西,它可以搜索文件流或从多个文件中读取单行(带有 N 次调用 read 的 shell 循环可以做到这一点)。

    【讨论】:

      【解决方案2】:

      awk '{a[FNR] = a[FNR]" " $7}END{for(i=0;i&lt;FNR;i++) print a[i]}'

      a 数组保存来自不同文件的每一行

      FNR当前输入文件中读取的记录数,在每个文件的开头设置为零。

      END{for(i=0;i&lt;FNR;i++) print a[i]} 在文件的END 上打印数组a 的内容

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 2017-07-01
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多