如何在一行unix命令中连接两个文件(删除第二个文件的第一行)?

时间:2017-01-18 16:42:37

标签: file unix sed merge

我正在尝试通过将两个文件(file3file1)堆叠在一起来创建新文件(例如file2)。我需要file1的全部内容,但希望排除file2的第一行。我现在所拥有的是使用headsed的两步流程。

cat file1.csv file2.csv > file3.csv
sed -i 1001d file3.csv

最后一步要求我在删除行之后找出file1的长度,使其对应于file2的第一行。如何将这两行组合成一行代码?我试过这个但它失败了:

cat file1.csv sed 1d file2.csv > file3.csv

4 个答案:

答案 0 :(得分:2)

您可以使用流程替换,例如:

cat file1.csv <(tail -n +2 file2.csv) > file3.csv

答案 1 :(得分:1)

您可以使用这样的复合语句:

{ cat file1.csv; sed '1d' file2.csv; } > file3.csv

答案 2 :(得分:0)

一种方法是intersect

另一个是cat file1.csv > file3.csv; tail -n +2 file2.csv >> file3.csv

答案 3 :(得分:0)

您可以使用第二次尝试,但使用流程替换:

.rectangle

您的命令失败,因为cat file1.csv <(sed '1d' file2.csv) > file3.csv 被视为sed尝试访问的文件名。

如果您的shell不支持进程替换,则可以改为使用:

cat

或者,您可以使用awk:

sed '1d' file2.csv | cat file1.csv - > file3.csv
如果我们不在第一个文件中(文件记录号不等于整体记录号),则

awk 'FNR!=NR && FNR==1 {next} 1' file{1,2}.csv > file3.csv 为真,并且FNR!=NR在每个文件的第一行为真。除了第一个文件之外,条件在每一行的第一行都是正确的; FNR==1跳过该行。 next会打印所有其他行。