如何合并不同行的文件?

kbe*_*nda 5 awk sort paste

合并不同文件行的最快命令行方式是什么?例如,我有两个文件:

.txt:

foo  
bar
foobar
Run Code Online (Sandbox Code Playgroud)

b.txt

foo
foobar
line
by
bar
Run Code Online (Sandbox Code Playgroud)

我想得到以下输出:

foo
bar
foobar
line
by
Run Code Online (Sandbox Code Playgroud)

有没有什么快速的方法可以像上面的例子那样合并文件?(行的顺序并不重要)

Kus*_*nda 10

$ sort -u a.txt b.txt
bar
by
foo
foobar
line
Run Code Online (Sandbox Code Playgroud)

这将对两个文件的(组合)内容进行排序,删除重复的行。不利的一面是,如果在其中一个文件中复制了一行,这也将被删除。

要将结果写入c.txt,请使用

sort -u -o c.txt a.txt b.txt
Run Code Online (Sandbox Code Playgroud)

或标准重定向

sort -u a.txt b.txt >c.txt
Run Code Online (Sandbox Code Playgroud)


Siv*_*iva 8

awk seen如果您不想对文件进行排序,请使用:

$ awk '!seen[$0]++' a.txt b.txt
foo  
bar
foobar
line
by
Run Code Online (Sandbox Code Playgroud)

  • @KrisztiánBenda 这是 `awk` 中的关联数组。您可以使用任何数组名称,并且 `seen` 通常用于这些类型的操作。`awk '!p[$0]++'` 也能正常工作。请注意,此解决方案适用于相当大量的数据,但内存消耗会随着输入中唯一行的数量而增加。 (2认同)

Rob*_*nny 5

根据您所需的输出,我假设您只希望将两个文件与唯一的字符串合并。

在这种情况下,catsortuniq能为你做到这一点:

cat a.txt b.txt | sort | uniq > c.txt
Run Code Online (Sandbox Code Playgroud)

cat 打开两个文件的内容

sort 按字母顺序对输出进行排序

uniq 只列出唯一的字符串

> c.txt 将所有输出放在一个新文件中 c.txt

  • 所以我了解到..据说答案仍然是一种替代方法,尽管不必要地冗长(相对而言)有效的答案。 (3认同)