从第一个文件除外的每个文件中删除第一行时连接500个文件

时间:2014-10-21 09:36:45

标签: linux bash sed scripting cat

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

我知道catsed应该用管道传输,但我不能把它包裹起来!

目前我能想到的是:

  1. 备份原始文件。
  2. 使用以下方法从每个文件中删除标题:

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

  3. 使用cat
  4. 连接文件
  5. 将标题添加到第3步的结果中。
  6. 你能提出一个可以保持原始文件完好无损的管道吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

由于您有500个文件,FNR > 1的评估结果会比NR == FNR更频繁,因此您可能需要切换订单以便发生短路:

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

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