Скрипт оболочки для поиска сходств между файлами

#bash #shell

#bash #оболочка

Вопрос:

У меня есть два файла с разделителями табуляции, которые состоят из столбца ID, а затем 20 или около того переменных. Я хотел бы найти те идентификаторы, которые существуют в обоих файлах. То, о чем я прошу, это что-то вроде противоположности скрипту bash ‘diff’. Приветствуются любые советы.

Ответ №1:

Инструмент comm может быть тем, что вам нужно — учитывая отсортированные входные данные из двух файлов, он может сообщить вам, какие строки есть только в файле A, какие в обоих, а какие только в файле B. Например, если у вас есть file-a который:

 17 p o i u
13 a b c d
14 q w e r t 
  

… и file-b который:

 18 a s d f 
13 f g h i
7 z x c v 
  

Вы можете использовать comm с заменой процесса следующим образом:

 $ comm -1 -2 <(cut -d ' ' -f 1 file-a|sort) <(cut -d ' ' -f 1 file-b|sort)
13
  

-1 Параметр подавляет строки, которые есть только в первом файле, и -2 подавляет те, которые есть только во втором.

Ответ №2:

Отсортируйте файлы, после чего вы сможете использовать

 $ join sortedfile1.txt sortedfile2.txt
  

и вы получите объединенную строку общих идентификаторов.

Ответ №3:

cut -f1 file1 file2 | sort | uniq -d