2016-03-06 2 views
1

Мне нужно объединить два файла csv с различной информацией в строках. Я знаю, что могу сделать что-то с командой join в bash (от this answer), но я не знаю, как применить его к моим данным.Объединить два csv с командой join

Так вот примеры двух CSV-:

CSV1:

Andre-Morange.trs;André Morange;2;no;M;58;yes;IDF; 
Andre-Morange.trs;Sara enq;1;yes;F;63;yes;IDF/Nice;SARA 
Anita Musso trs.trs;Anita Musso;1;no;F;46;yes;?; 
Anita Musso trs.trs;Sarah enq;2;yes;F;63;yes;IDF/Nice; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine Ceret.trs;Blanche;4;no;F;25;yes;IDF; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine Ceret.trs;Jean-Pierre;2;no;M;60;yes;IDF; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine Ceret.trs;Reine;3;no;F;60;yes;IDF; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine Ceret.trs;Sarah enq;1;yes;F;63;yes;IDF/Nice; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;Christophe;3;no;M;61;yes;IDF; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;Dame + enqSarah;;;;;;; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;Dame + homme;4;;;;;; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;enqSarah;1;yes;F;63;yes;IDF/Nice;SARA 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;Marie-Anne;2;no;F;62;yes;IDF; 

CSV2:

Andre-Morange.trs;André Morange;2; 
Andre-Morange.trs;Nasser;3; 
Andre-Morange.trs;Sara enq;1; 
Andre-Morange.trs;speaker#4;4; 
Anita_Musso_trs.trs;Anita Musso;1; 
Anita_Musso_trs.trs;Sarah enq;2; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine_Ceret.trs;Blanche;4; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine_Ceret.trs;Jean-Pierre;2; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine_Ceret.trs;Reine;3; 
Blanche_Duchemin_Jean_Pierre_Duchemin_Reine_Ceret.trs;Sarah enq;1; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;Christophe;3; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;dame + enqSarah;5; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;dame + homme;4; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;enqSarah;1; 
Christophe_Andre_H_62_Marie_Anne_Andre_F_63_5e.trs;Marie-Anne;2; 

Здесь только подразделу два CSV-х. Важно то, что первый CSV имеет больше столбцов, но меньше строк, чем второй (CSV1 имеет 965 строк и 8 столбцов, а CSV2 - 1496 строк и 3 столбца). Однако некоторые из строк в CSV2 отсутствуют в CSV1. Я хочу объединить два файла таким образом, чтобы в конце я добавил все строки из CSV2, кроме строк, которые уже присутствовали в CSV1.

Надеюсь, мой вопрос не слишком запутан, я искал способ сделать это несколько часов, и я сам смущен!

+0

вы хотите 'join' на основе 1-й колонке file1 и file2..right ? – ritesht93

+0

Простите, если я не понимаю. Я хочу, чтобы результат был таким же, как CSV1, с добавленными всеми строками, содержащимися в CSV2, за исключением строк CSV2, которые уже существуют (с теми же самыми первыми тремя столбцами) в CSV1, поскольку, если они находятся в CSV1, у них больше столбцов и таким образом, информация, которую я хочу сохранить. –

+0

Было бы неплохо, если бы вы могли взглянуть на: [Что делать, если кто-то отвечает на мой вопрос?] (Http://stackoverflow.com/help/someone-answers) – Cyrus

ответ

0

Если вы не ограничены использованием соединения, вы можете решить вашу проблему с короткой Perl Однострочник:

cat 1.csv 2.csv | perl -lne '$key = join ";", (split(/;/,$_))[0..2]; print $_ unless $seen{$key}++;' 
+0

Спасибо, это решение работает очень хорошо. Я думал, что команда соединения была бы простой, но использование perl кажется большим для этой проблемы! –

Смежные вопросы