2014-09-10 3 views
-1

мне нужно найти разницу между двумя файлами в Unix,найти общие столбцы позиции между файлами

Файл 1:

1,column1 
2,column2 
3,column3 

Файл 2:

1,column1 
2,column3 
3,column5 

I необходимо найти позицию общего столбца в файле 2 из файла 1 Если нет подходящего партнера lumn в файле1 должно возвращаться некоторое значение индекса по умолчанию и имя столбца.

Выход:

1,column1 
    3,column3 
    -1,column5 

Может кто-нибудь помочь мне получить в Unix сценария?

Спасибо, William R

+1

слышал о [ 'diff'] (http://man.cx/diff) или [' comm'] (http://man.cx/comm)? – anishsane

+0

Почему «file2 - file1» содержит «1, column1»? – anishsane

+0

Жаль, что это не разница, мне нужно найти общую позицию столбца и записать в другой файл. –

ответ

1

AWK:

awk -F, 'NR==FNR{a[$2]=1; next;} ($2 in a)' file2 file1 

Grep + процесс замещение:

grep -f <(cut -d, -f2 file2) file1 

EDIT для обновленного вопроса:

AWK:

awk -F, 'NR==FNR{a[$2]=$1;next} {if ($2 in a) print a[$2]","$2; else print "-1," $2}' file1 file2 
# if match found in file1, print the index, else print -1 
# (Also note that the input file order is reversed in this command, compared to earlier awk.) 

Grep:

cp file1 tmpfile #get original file 
grep -f <(cut -d, -f2 file1) -v f2 | sed 's/.*,/-1,/' >> tmpfile #append missing entries 
grep -f <(cut -d, -f2 file2) tmpfile # grep in this tmpfile 
+0

Спасибо Очень много, но небольшая справка 3, column5 в File2 (которая не соответствует в файле1) в этом случае, как мы можем указать -1, column5 в выходном файле. –

+1

Редактировать свой вопрос на примере. – anishsane

+0

Отредактированный вопрос. –

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