2016-03-28 6 views
1

Я хочу сравнить вторую колонку (с разделителями с пробелом) в file1:Сравнение столбцов в двух текстовых файлах и спичечные линиях

n01443537/n01443537_481.JPEG n01443537 
n01629819/n01629819_420.JPEG n01629819 
n02883205/n02883205_461.JPEG n02883205 

Со второй колонки (отделенной от пробела) в file2:

val_8447.JPEG n09256479 
val_68.JPEG n01443537 
val_1054.JPEG n01629819 
val_1542.JPEG n02883205 
val_8480.JPEG n03089624 

Если есть совпадение, я хотел бы распечатать соответствующую строку файла2.

Желаемая выход в этом примере:

val_68.JPEG n01443537 
val_1054.JPEG n01629819 
val_1542.JPEG n02883205 

Я попытался следующие, но выходной файл пуст:

awk -F' ' 'NR==FNR{c[$2]++;next};c[$2] > 0' file1.txt file2.txt > file3.txt 

попытался также, но результат был тот же (пустой выходной файл):

awk 'NR==FNR{a[$2];next}$2 in a' file1 file2 > file3.txt 

ответ

1

Использование AWK:

awk 'FNR==NR{a[$NF]; next} $NF in a' file1 file2 

val_68.JPEG n01443537 
val_1054.JPEG n01629819 
val_1542.JPEG n02883205 

Вот grep альтернатива с подменой процесса:

grep -f <(awk '{print " " $NF "$"}' file1) file2 

Использование print " " $NF "$" создать регулярное выражение, как " n01443537$", так что мы сопоставляем только последний столбец в grep.

+0

Хмм ... мой выход по-прежнему остается пустым, к сожалению. Я думаю, проблема может быть в моих исходных файлах. Как я могу проверить, действительно ли столбцы ограничены одним пробелом в каждой строке? Я уверен, что они есть, но, возможно, я могу проверить, чтобы быть уверенным. –

+1

Вы можете запустить 'cat -vte' в обоих файлах и проверить, какие символы присутствуют (это может быть связано с завершением строки DOS) – anubhava

+0

Мы можем быть здесь. Для file1 я получаю '$' добавленную к каждой строке. Для file2 я получаю '^ M $ 'добавленный к каждой строке. –

2

GNU join для этой цели.

join -o "2.1 2.2" -j 2 <(sort -k 2 file1) <(sort -k 2 file2)

+0

Прохладный, не думал использовать 'join'. Это не работает (пока), однако, я думаю, что это связано с проблемой с моими входными файлами. –

+2

1. Он будет выдавать выходные данные не в исходном порядке. 2. Сортировка может быть дорогостоящей для больших файлов – anubhava

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