Сравните два столбца файла

Сравните два столбца файла

У меня есть длинные текстовые файлы с полями, разделенными пробелами:

cat file1.txt
Id    leng  sal   mon
25671 34343 56565 5565
44888 56565 45554 6868
23343 23423 26226 6224
77765 88688 87464 6848
66776 23343 63463 4534

cat file2.txt
Id    number
25671 34343 
76767 34234 
23343 23423 
66776 23343 

cat output.txt
Id    leng  sal   mon
44888 56565 45554 6868
77765 88688 87464 6848

file1.txtимеет четыре столбца, file2.txtимеет два столбца. Я хочу сравнить 1-й столбец ( $1) в обоих файлах ( file1.txt, file2.txt) и вывести файл, который не совпал в file2.txt.

я пытался

join -v1 file1.txt file2.txt >output.txt

Но в выводе есть некоторые ошибки. Любая команда awk/ sedприветствуется.

решение1

Чтобы использовать join, вам необходимо убедиться, что FILE1 и FILE2 являютсясортированныйна полях соединения.

Следующая команда должна помочь:

join -v1 <(sort file1.txt) <(sort file2.txt)

решение2

Вот так, но без заголовка:

$ awk '{print $1}' file2.txt | grep -vf - file1.txt
44888 56565 45554 6868
77765 88688 87464 6848

Примечание: Я отрегулировал это, чтобы соответствовать примеру вывода, а не вашему описанию. Если вы хотите, чтобы было наоборот, просто поменяйте местами file1 и file2.

Разбираем это подробнее:

  • awkпечатает только поле 1 изfile2.txt
  • grep -vинвертирует совпадение (выводит несовпадающие строки)
  • -f -сообщает о grepнеобходимости прочитать список шаблонов соответствия из файла, в данном случае -( STDIN), который был передан изawk

Связанный контент