如何合并两个不包含重复项的csv文件

时间:2013-12-17 01:11:15

标签: bash csv sed awk grep

如果我有像这样的csv文件

lion@mammal@scary animal
human@mammal@human
hummingbird@bird@can fly
dog@mammal@man's best friend
cat@mammal@purrs a lot
shark@fish@very scary
fish@fish@blub blub

我还有另一个像这样的csv文件

cat@mammal@purrs a lot
shark@fish@very scary
fish@fish@blub blub
rockets@pewpew@fire
banana@fruit@yellow

我希望输出如下:

lion@mammal@scary animal
human@mammal@human
hummingbird@bird@can fly
dog@mammal@man's best friend
cat@mammal@purrs a lot
shark@fish@very scary
fish@fish@blub blub
rockets@pewpew@fire
banana@fruit@yellow

第一个csv文件中的一些内容存在于第二个csv文件中;它们重叠很多。如何将这些csv文件与正确的顺序组合?保证新条目始终是第一个csv文件开头的前几行。

2 个答案:

答案 0 :(得分:11)

Soultion 1:

awk '!a[$0]++' file1.cvs file2.cvs

解决方案2(如果不关心原始订单)

sort -u file1 file2

答案 1 :(得分:0)

这是一种方式:

  • 使用cat -n连接输入文件和前缀行号
  • 使用sort -u删除重复数据
  • 使用sort -n按前缀数字
  • 再次排序
  • 使用cut删除行号
$ cat -n file1 file2 | sort -uk2 | sort -nk1 | cut -f2-
lion@mammal@scary animal
human@mammal@human
hummingbird@bird@can fly
dog@mammal@man's best friend
cat@mammal@purrs a lot
shark@fish@very scary
fish@fish@blub blub
rockets@pewpew@fire
banana@fruit@yellow
$