我正在尝试通过将两个文件(file3
和file1
)堆叠在一起来创建新文件(例如file2
)。我需要file1
的全部内容,但希望排除file2
的第一行。我现在所拥有的是使用head
和sed
的两步流程。
cat file1.csv file2.csv > file3.csv
sed -i 1001d file3.csv
最后一步要求我在删除行之后找出file1
的长度,使其对应于file2
的第一行。如何将这两行组合成一行代码?我试过这个但它失败了:
cat file1.csv sed 1d file2.csv > file3.csv
答案 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
会打印所有其他行。