File1 +(File2 - 第一行)>文件3

时间:2012-08-27 02:40:43

标签: unix sed cat

我有两个csv / text文件,我想加入。两者都包含相同的第一行。我试图弄清楚如何使用sed和cat来生成合并文件,但只有第一行的一个副本。而且我有时间使用语法。任何帮助将不胜感激:-D! 谢谢, 安德鲁

4 个答案:

答案 0 :(得分:4)

这将合并文件data1.txt中的文件data2.txtmerged.txt,跳过data2.txt的第一行。如果你对它好的话,它使用awk:

(cat data1.txt; awk 'NR>1' data2.txt) > merged.txt

awk将所有行添加行号> 1从文件data2.txt到文件merged.txt

NR是一个内置的awk变量,代表正在处理的文件的当前行号。如果布尔表达式NR > 1为true,则awk会隐式打印该行。

如果你不关心保持data1.txt完整,你可以只追加你的第二个文件(减去它的第一行)并减少到这个:

awk 'NR>1' data2.txt >> data1.txt

答案 1 :(得分:4)

awk的另一个选择:

awk 'NR==FNR || FNR>1' file1.txt file2.txt .. fileN.txt

这将打印第一个文件中的所有行,或第一行之后的后续文件中的任何行。

答案 2 :(得分:2)

我会说最直接的解决方案是:

( cat file1.txt ; tail -n +2 file2.txt ) > file3.txt

它的优点是清楚地说明你正在做什么:打印整个第一个文件,然后打印除第二个文件的第一行以外的所有文件,将输出写入第三个文件。

答案 3 :(得分:1)

用一条线解决了    '1 d'表示删除file2中的第一行

以下命令会将结果附加到file1

sed '1 d' file2 >> file1