Ошибка сравнения файлов – 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 
  • Эхо-список процесса не работает
  • Как удалить имя из фамилии, когда длина неизвестна?
  • Ввод текста из сценария оболочки
  • Если утверждения в Array
  • Каков формат отправки сообщения в sendmail?
  • Текст Unicode не отображается правильно в оболочке
  • Cronjob не выполняет сценарий оболочки, но когда я выполняю его автономно, он работает. Зачем?
  • Как найти все файлы, соответствующие (или не соответствующие) конкретному шаблону в папке?
  • Что такое ярлык bash для перехода к предыдущему каталогу?
  • переименование файлов без команды ** rename **
  • wget пакетный файл linux
  • Interesting Posts

    Возможно ли смоделировать установку пакетов Debian, по-прежнему маркируя их установленными?

    Вызов сценария Bash ожидает сценария с основным SSH-соединением

    vim и tmux противоречат друг другу. Как я могу это исправить?

    Как выбрать строки из файла CSV на основе разных значений столбцов?

    Chromecast / Cubetek Ezcast с Linux-компьютером?

    Что означает описание в ошибке «ENOLCK»?

    Выход из терминала «nohup ./my_script &» => «У вас есть рабочие задания». ОК, чтобы выйти?

    как мне управлять зависимостями для этого вручную установленного файла rpm?

    Linux: как настроить TSO и GSO из окна proc / sysctl

    Почему я получаю ошибку «отсутствие учетных данных» при установке общего ресурса Kerberized NFS?

    Как установить легкий vim и иметь возможность эффективно загружать файлы в один экземпляр vim?

    Как вы можете перемещать (или копировать) все файлы определенного типа в каталог в Unix?

    Программа вроде vnStat, которая фильтрует только для внешнего (интернет-трафика)

    Мышь Bluetooth перестает работать через несколько секунд (проблема NetworkManager)

    Объединение двух команд SSH

    Linux и Unix - лучшая ОС в мире.