Ошибка сравнения файлов – awk

У меня есть два файла file1.txt , file2.txt . Я хочу выбрать записи, которые являются общими для file1.txt и file2.txt на основе столбца 2 и столбца 3 и скопировать их в out.txt с дополнительным столбцом (столбец 4 из file2.txt ).

Пример ввода:

file1.txt

 abc 1 a f11 f13 f14 abd 2 b f12 f14 f13 abe 4 d f13 f16 f12 acf 5 s f14 f15 f19 

file2.txt

 abc 1 a f21 f23 f24 abd 1 b f21 f24 f23 abe 4 d f24 f26 f22 acf 6 s f23 f25 f29 

Желаемый выход

out.txt

  abc 1 a f11 f13 f14 f21 abe 4 d f13 f16 f12 f24 

Ранее я задал аналогичный вопрос о том, как работать с тремя файлами и извлекать аналогичную информацию на основе аналогичного ввода для лучшего понимания. Я новичок в мире Unix и изучал, как обрабатывать файлы. Исходя из этого, я пробовал использовать код с помощью awk но не работал. Может кто-нибудь, пожалуйста, проверьте и предложите, что пошло не так?

 awk 'FILENAME == ARGV[1] { m[$2,$3] = 0; z[$2,$3] = $6; next; } { if (($2,$3) in m && m[$2,$3] == 1) { print $0 " " z[$2,$3] >"out.txt"; } }' file2.txt file1.txt 

2 Solutions collect form web for “Ошибка сравнения файлов – awk”

В вашем примере вы создаете массив m со значениями 0. Вы нигде не устанавливаете его в 1, и вам не нужно. Вы можете просто установить значение для всей строки, например $ 0.
Попробуй это:

 awk 'FILENAME == ARGV[1] { m[$2,$3] = $0; next; } { if (($2,$3) in m) { print m[$2,$3] " " $4 >"out.txt"; } }' file1.txt file2.txt 

AWK

 awk 'FNR==NR { a[$2, $3]=$4 next } ($2, $3) in a{ print $0, a[$2, $3] } ' file2.txt file1.txt > out.txt 

присоединиться

 join -j 2 \ <(sort -k2,3 file2.txt | sed 's/ /+/2') \ <(sort -k2,3 file1.txt | sed 's/ /+/2') \ -o 1.1,1.2,1.3,1.4,1.5,2.3 | sed 's/+/ /' > out.txt 
  • bash добавляет дополнительные одинарные кавычки
  • Имена файлов каталогов с sed с пробелами
  • Почему `` `встроенная оболочка и` [[`ключевое слово оболочки?
  • Название файла печати, измененная дата и размер с заголовком
  • Подстановка Bash с переменной, определенной из шаблона glob
  • Игнорировать специальные символы в сравнении с сценарием оболочки
  • Удаление всех изображений, сделанных с помощью конкретной камеры.
  • Как иметь дело с пробелами в переменной
  • Передайте флаг фона (&) через expect и ssh
  • Как удалить первые n строк и последнюю строку файла с помощью команд оболочки?
  • cp, запущенный из результатов кода, не может stat '/ tmp / somedir' работает в оболочке
  • linux + awk + манипуляция файлами
  • Linux и Unix - лучшая ОС в мире.