shell 合并两个文本文件在一个没有重复的标题在bash

qcbq4gxm  于 2023-05-07  发布在  Shell
关注(0)|答案(2)|浏览(103)

我有两个文件,看起来像这样:

file1.txt

ID group gender age
a 1 m 55
b 1 f 54
c 2 m 53
... etc

file2.txt

ID group gender age
l 1 m 64
m 2 f 94
n 2 m 93
... etc

所需输出:

ID group gender age
a 1 m 55
b 1 f 54
c 2 m 53
.
l 1 m 64
m 2 f 94
n 2 m 93
.

这意味着头只显示一次。我试过head -n 1 file1.txt > merge.txt; tail -n +2 -q *.txt >> merge.txt,在我的真实的file1.txt有87394750行和file2.txt有369765446行,它花了很多时间。有什么想法吗?非常感谢!

9rnv2umw

9rnv2umw1#

使用cat、重定向和tail(在 * 进程替换 * 中)的仅bash解决方案可以通过以下方式完成:

cat file1.txt <(tail -n+2 file2.txt) > merged.txt

其中merged.txt包含:

$ cat file1.txt <(tail -n+2 file2.txt) > merged.txt

$ cat merged.txt
ID group gender age
a 1 m 55
b 1 f 54
c 2 m 53
...
l 1 m 64
m 2 f 94
n 2 m 93
...
azpvetkf

azpvetkf2#

使用cp,然后使用sed

cp file1.txt merge.txt; sed 1d file2.txt >> merge.txt

sed 1d跳过第一行。
要跳过更多行,请使用sed 1,nd,其中n是要跳过的总行数。

相关问题