【问题标题】:Concatenating 500 files while removing the first line from each file except the first file连接 500 个文件,同时从除第一个文件之外的每个文件中删除第一行
【发布时间】:2014-10-21 09:36:44
【问题描述】:

我想创建一个文件,它是 500 个文件的串联结果,其中除第一个文件之外的每个文件的第一行都被删除。我也希望原始文件保持不变。

我知道 catsed 应该通过管道传输,但我无法完全理解它!

目前我能想到的如下:

  1. 备份原始文件。

  2. 使用以下方法从每个文件中删除标题:

    for x in *.seg; do sed -i 1d ${x}; done

  3. 使用cat连接文件

  4. 将标题添加到第 3 步的结果中。

您能否提出一个可以在保持原始文件完整的同时做到这一点的管道?

【问题讨论】:

    标签: linux bash sed scripting cat


    【解决方案1】:

    您可以使用 awk 来执行此操作:

    awk 'NR == FNR || FNR > 1' *.seg > destination
    

    对于第一个文件,总记录数 NR 将等于当前文件的记录数 FNR,因此将打印所有行。对于其他文件,仅打印第一个文件之后的行。输出重定向到文件destination

    由于您有 500 个文件,FNR > 1 将比 NR == FNR 更频繁地评估为 true,因此您可能需要切换顺序以便发生短路:

    awk 'FNR > 1 || NR == FNR' *.seg > destination
    

    || 的第一部分为真时,不需要评估第二部分。快得多;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-19
      • 2020-06-12
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多