У меня есть два файла как это:
Файл 1
apple fruit 10 4
strawberry fruit 22 11
berry fruit 33 33
ball toy 1 12
straw thing 2 33
Файл 2
strawberry straw berry
rawberry raw berry
Я хочу сравнить столбец 1 файла 2 со столбцом 1 файла 1, столбцом 2 файла 2 со столбцом 1 файла 1, столбцом 3 файла 2 со столбцом 1 файла 1. Если соответствие найдено, я хочу отобразить все три согласующих отрезка длинной линии из файла 1.
Здесь, вывод должен быть:
strawberry fruit 22 11
straw thing 2 33
berry fruit 33 33
Как я могу сделать этот Unix использования команды на терминале?
Можно попробовать grep -Ff File2 File1
, Где,-f File2 читает шаблоны из File2, и-F рассматривает шаблоны как фиксированные строки
Базирующийся в предложении Arijit Chatterjee, я предлагаю
grep -Ff <(tr -s " " "\n" < file2) file1
, Где tr -s " " "\n"
преобразовывает file2 во вход one-word-per-line, лучше адаптированный к grep -Ff
Используя awk
, Вы могли поместить все слова File2
в ассоциативный массив и затем проверить поле 1 File2
для членства:
awk 'NR==FNR {for(i=1;i<=NF;i++) a[$i]++; next} $1 in a' File2 File1
strawberry fruit 22 11
berry fruit 33 33
straw thing 2 33
аналогичное решение А могло быть реализовано с помощью хеша в perl