2016-10-12 8 views
0

Я пытаюсь понять awk-сравнение двух полей из разных файлов. (все файлы с разделителями табуляции)сравнить два файла (понимание)

первого файла:

1 11796321 
1 169549811 
1 173917078 
2 48962782 
4 121696962 
4 121697011 

второй файл:

a 0 1 2 0 b 1 11796321 a 
b 0 1 0 2 c 1 11800000 bd 
c a d 0 0 2 4 121696962 0 

ВЫВОД:

b 0 1 0 2 c 1 11800000 bd 

Так что я хотел бы сравнить $ 1 и 2-й столбец из первого файла с 7-м и 8-м столбцами во втором файле и печать не имеет себе равных.

Я пробовал:

awk -v OFS="\t" -F '\t' 'FNR==NR{a[$1,$2]; next} ($7,$8) in a {next} {print $0}' file1 file2 

Не могли бы вы помочь понять, где ошибка и как я мог сравнить эти файлы? Спасибо.

+0

Там нет ничего плохого сценария вы в курсе, он будет работать как вы говорите, вы хотите в любом POSIX awk. Каким образом это не работает для вас? –

ответ

1

Если разделитель в обоих файлах одинаковы (<tab>), вы можете попробовать это:

awk -F '\t' 'FNR==NR{k=$1 FS $2;a[k];next} !($7 FS $8 in a)' file1 file2 
+0

Он отлично работает. Поэтому сначала я должен определить k, где FS (\ t) и поместить его в массив a, который определяется k и после этого сравнения ... Правильно ли это? – Vonton

+0

@fedulka можете ли вы сообщить, какую версию awk вы используете первым? – Kent

+0

awk version 4.0.1 – Vonton

1

изменение

$ awk -v OFS="\t" -F'\t' 'FNR==NR{a[$1,$2]; next} !(($7,$8) in a)' file1 file2 
+0

Спасибо, ваш скрипт работает хорошо. Всегда работает. Спасибо – Vonton

+0

Вы не используете 'OFS', поэтому не нужно его устанавливать. –

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