Как сравнить несколько файлов и отобразить общие строки?

У меня есть четыре таких файла:

Содержимое файла 1 (разделены табуляцией, 3 столбца):

applepen apple pen
strawberry straw berry

Содержимое файла 2:

applepen
strawjelly

Содержимое файла 3 (этот файл отсортирован):

apple
fan
straw

Содержимое файла 4 (Этот файл отсортирован):

pen
zenith

Мне нужно сравнить поле 1 файла 1 с файлом 2, поле 2 файла 1 с файлом 3 и поле 3 файла 1 с файлом 4. Если все три совпадения найдены, я хочу для печати поля 1,2,3 файла 1. Я хочу сделать это для каждой строки в файле 1.

Здесь должен быть вывод:

applepen apple pen

Есть ли способ сделать это с помощью grep, comm или чего-то подобного ?

0
08.11.2016, 05:21
2 ответа
while read -r f11 f12 f13
do
  grep -qxFe "$f11" file2 && 
  grep -qxFe "$f12" file3 && 
  grep -qxFe "$f13" file4 && 
  printf "%s\n" "$f11 $f12 $f13"
done < file1
0
28.01.2020, 02:47

Это задание для join.

$ cat file1 
applepen    apple   pen
strawberry  straw   berry
$ cat file2
applepen
strawjelly
$ cat file3
apple
fan
straw
$ cat file4
pen
zenith
$ join file[12] | join -1 2 -o 1.1,1.2,1.3 - file3 | join -1 3 -o 1.1,1.2,1.3 - file4
applepen apple pen
$ 

Если вам действительно важны табуляции вместо пробелов, вы можете перевести их обратно с помощью | tr ' ' '\t'.

1
28.01.2020, 02:47

Теги

Похожие вопросы