#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