2010-01-22 177 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」不同。在此之後,將顯示此列的實際和預期結果。