2010-01-22 166 views
1

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

Ex。

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

请帮助 感谢,

回答

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] 
+0

“不需要shell脚本”。你听起来像只有Python才能完成这项工作。 – ghostdog74 2010-01-22 01:43:34

+2

完全没有,但我发现这种方式更简单。 – 2010-01-22 02:08:36

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 
+0

问题的格式已关闭。再看看。 – 2010-01-22 05:37:26

+0

谢谢。如果我得到OP的要求正确,输出仍然是相同的。 – ghostdog74 2010-01-22 08:32:57

0

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

报价: csvdiff是一个Perl脚本,DIFF /比较两个CSV文件适用的可能性来选择分离器。差异将显示如下:“记录999中的列XYZ”不同。在此之后,将显示此列的实际和预期结果。