2015-11-02 1 views
0

J'ai deux fichiers CSV:Comment puis-je comparer les colonnes de deux fichiers csv par clé par ligne de commande Linux?

hogehoge.csv

1,aaa,bbb 
2,ccc,ddd 
3,eee,fff 
4,ggg,hhh 
5,iii,jjj 
6,kkk,lll 
7,mmm,nnn 
8,ooo,ppp 
9,qqq,rrr 
10,sss,ttt 

hogehoge2.csv

1,aaa,bb 
2,ccc,ddd 
3,eee,fff 
4,ggg,hhh 
5,iii,jjj 
7,mmm,nnn 
8,ooo,ppp 
9,qqq,rrr 
10,sss,ttt 

Je veux obtenir un résultat comme celui-ci par la ligne de commande (diff/couper/awk) .

6,kkk,lll 

Il y a une différence sur la 1ère ligne, mais je veux ignorer cette différence sur la 1ère ligne.

+0

cela a été demandé plusieurs fois. Qu'avez-vous essayé jusqu'ici? – fedorqui

+0

diff hogehoge.csv hogehoge2.csv awk -F "" 'NR == FNR {c [$ 1] ++;} suivant c [$ 1] == 0' hogehoge.csv hogehoge2.csv Ils sont pas recueillir. – shigemk2

Répondre

0

Comme la question est posée, vous voulez simplement comparer deux fichiers ligne par ligne. comm peut être un bon choix:

comm -3 hogehoge.csv hogehoge2.csv 

Si vous voulez ignorer la première ligne de chaque fichier:

comm -3 <(tail -n +2 hogehoge.csv) <(tail -n +2 hogehoge2.csv) 

dont la sortie vous permet d'imprimer exactement spécifié. Remarque: comm -3 va imprimer les lignes qui diffèrent dans chaque fichier, et la liste des différentes lignes dans le deuxième fichier sera indentée avec des onglets. Pour supprimer les onglets:

comm -3 <(tail -n +2 hogehoge.csv) <(tail -n +2 hogehoge2.csv) | sed $'s/\t*//' 
+0

Merci beaucoup. – shigemk2