我正在使用bash脚本编写一个项目来读取三个不同的.csv文件并输出相似的行。 三个.csv文件使用相同的信息以相同的方式格式化,但第二列可能不同。 例如,如果我有三个csv文件,名为A.csv,B.csv和C.csv。
A.csv
Animal, Color, Age
Dog, Brown, 9
Cow, White, 3
Cat, Black, 5
Parrot, Blue, 2
B.csv
Animal, Color, Age
Dog, Black, 9
Cow, White, 3
Cat, Brown, 5
Parrot, Blue, 2
C.csv
Animal, Color, Age
Dog, Brown, 9
Cow, White, 3
Cat, Tan, 5
Parrot, Blue, 2
运行程序后,我希望获得如下输出:
Animal, Color, Age
Cow, White, 3
Parrot, Blue 2
我已经阅读了diff3,但这只会输出与我想要做的相反的差异。任何帮助将不胜感激。感谢
答案 0 :(得分:6)
使用grep
:
grep A.csv -f B.csv | grep -f C.csv
grep -f FILE
从文件中获取模式。
输出:
Animal, Color, Age
Cow, White, 3
Parrot, Blue, 2
答案 1 :(得分:1)
使用awk
:
awk '
FILENAME==ARGV[1]{a[$0]++;next}
FILENAME==ARGV[2] && ($0 in a){b[$0]++;next}
$0 in b' A.csv B.csv C.csv
Animal, Color, Age
Cow, White, 3
Parrot, Blue, 2
答案 2 :(得分:0)
有点复杂但完成工作
sort <(tail -n +2 A.csv) <(tail -n +2 B.csv) |
uniq -d | sort <(tail -n +2 C.csv) - |
uniq -d | cat <(head -1 A.csv) -
答案 3 :(得分:0)
两步法:
$ comm -12 <(sort A.csv) <(sort B.csv) > tmp
$ comm -12 <(sort tmp) <(sort C.csv)
Animal, Color, Age
Cow, White, 3
Parrot, Blue, 2