我想创建一个文件,该文件是500个文件串联的结果,其中删除了除第一个文件之外的每个文件的第一行。我也希望原始文件保持不变。
我知道cat
和sed
应该用管道传输,但我不能把它包裹起来!
目前我能想到的是:
使用以下方法从每个文件中删除标题:
for x in *.seg; do sed -i 1d ${x}; done
cat
你能提出一个可以保持原始文件完好无损的管道吗?
答案 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
当||
的第一部分为真时,无需评估第二部分。快得多;)