比较csv文件

时间:2010-01-22 01:24:53

标签: shell csv scripting compare

我想编写一个shell脚本来比较两个.csv文件。第一个包含文件名,路径第二个.csv文件包含filename,paht,target。现在,我想比较两个.csv文件并输出目标名称,其中第一个.csv文件存在于第二个.csv文件中。

实施例。

a.csv

build.xml,/home/build/NUOP/project1  
eesX.java,/home/build/adm/acl

b.csv

  

的build.xml,/家庭/建造/ NUOP / PROJECT1,M1
  eesX.java,/家庭/建设/ ADM / ACL,M2
  ddexse3.htm,/家庭/类/ ADM / 33eFg

我希望输出是这样的。

M1和M2

请帮忙 谢谢,

3 个答案:

答案 0 :(得分:0)

如果您不一定需要shell脚本,可以使用Python轻松完成:

import csv

seen = set()

for row in csv.reader(open('a.csv')):
  seen.add(tuple(row))

for row in csv.reader(open('b.csv')):
  if tuple(row[:2]) in seen:
    print row[2]

答案 1 :(得分:0)

如果那些M1和M2总是在第3和第5场,你可以尝试这个

awk -F"," 'FNR==NR{
    split($3,b," ")
    split($5,c," ")
    a[$1]=b[1]" "c[1]
    next
}
($1 in a){
    print "found: " $1" "a[$1]
}' file2.txt file1.txt

输出

# cat file2.txt
build.xml,/home/build/NUOP/project1,M1 eesX.java,/home/build/adm/acl,M2 ddexse3.htm,/home/class/adm/33eFg
filename, blah,M1 blah, blah, M2 blah , end

$ cat file1.txt
build.xml,/home/build/NUOP/project1 eesX.java,/home/build/adm/acl

$ ./shell.sh
found: build.xml M1 M2

答案 2 :(得分:0)

尝试http://sourceforge.net/projects/csvdiff/

引用: csvdiff是一个Perl脚本,用于区分/比较两个csv文件,可以选择分隔符。差异将显示为:“记录999中的XYZ列”是不同的。在此之后,将显示该列的实际和预期结果。