2017-07-27 86 views
0

我有一個CSV文件,其中有逐列數據,如獲取所有的重複記錄在CSV列是否不同

EvtsUpdated,IR23488670,15920221,ESTIMATED 
EvtsUpdated,IR23488676,11014018,ESTIMATED 
EvtsUpdated,IR23488700,7273867,ESTIMATED 
EvtsUpdated,IR23486360,7273881,ESTIMATED 
EvtsUpdated,IR23488670,7273807,ESTIMATED 
EvtsUpdated,IR23488670,9738420,ESTIMATED 
EvtsUpdated,IR23488670,7273845,ESTIMATED 
EvtsUpdated,IR23488676,12149463,ESTIMATED 

,我只是想找出所有重複的行忽略列,這是第3列的輸出應該像

EvtsUpdated,IR23488670,15920221,ESTIMATED 
EvtsUpdated,IR23488676,11014018,ESTIMATED 
EvtsUpdated,IR23488700,7273867,ESTIMATED 
EvtsUpdated,IR23488670,7273807,ESTIMATED 
EvtsUpdated,IR23488670,9738420,ESTIMATED 
EvtsUpdated,IR23488670,7273845,ESTIMATED 
EvtsUpdated,IR23488676,12149463,ESTIMATED 

我通過首先使用切割其它列除外3在另一個文件中嘗試過

cut --complement -f 3 -d, filename into another file, 

然後我嘗試使用awk命令,如awk -F'{if(FNR == NR){print}}'secondfile

因爲我沒有awk的完整知識,所以我不是能夠做到這一點

+0

看看[通訊](https://ss64.com/bash/comm.html)「通用 - 比較兩個排序文件一行一行地寫到標準輸出: 屬於線共同的,加上獨特的線條。「 – DanieleO

+0

無法解決從COMM COMMAND – ggupta

+0

@ggupta'EvtsUpdated,IR23488700,7273867,ESTIMATED'不重複。爲什麼它仍然是輸出的一部分? –

回答

0

您可以使用awk數組來存儲每組列的數量以識別重複項。

awk -F "," '{row[$1$2$4]++ ; rec[$0","NR] = $1$2$4 } 
END{ for (key in rec) { if (row[rec[key]] > 1) { print key } } }' filename | sort -t',' -k5 | cut -f1-4 -d',' 

另外一個sort被要求保持原來的排序預計在你的輸出。

注意:在顯示的輸出中,IR23488700的行被認爲是重複的,即使它不是。

+0

我已經給定的數據樣本,它們可以是多列所以服用逐列將更加困難,我認爲。 – ggupta

0

我也是這樣做的,先切割第三列,然後運行awk '++A[$0]==2' file命令。感謝您的幫助