Сравните два файла с использованием AWK

Вот для новичков, чтобы облегчить атмосферу:

Какая ваша любимая история из BOFH?

0
27.08.2018, 13:53
2 ответа

Для этой задачи более простым инструментом, чем awk, являетсяjoin:

join -t '=' -1 1 -2 1 file1.txt file2.txt

Пояснение

Дополнительную информацию см. в man join, но:

  • -t '=':используйте =в качестве разделителя
  • -1 1 -2 1:объединение в поле 1 файла 1 и поле 1 файла 2
  • file1.txt file2.txt:соедините эти два файла.
1
28.01.2020, 02:23

Насколько я понимаю, вы хотите вывести только те поля, ключ которых присутствует в обоих файлах, с обоими значениями. Как упоминалось в ответе Спархока , правильным инструментом для этого является join. С AWK работает следующее:

#!/usr/bin/awk -f

BEGIN {
    OFS = FS = "="
}

FNR == NR {
    values[$1] = $2
}

FNR < NR {
    if (values[$1]) {
        print $1, values[$1], $2
    }
}

Это начинается с установки разделителей входных и выходных полей в «=», затем выполняется синтаксический анализ первого файла (FNR == NR), сохранение всех его значений в ассоциативном массиве values, затем анализируется любой последующий файл(FNR < NR)и для каждой строки, если значение было замечено в первом файле, выводит ключ, сохраненное значение и значение в текущем файле.

2
28.01.2020, 02:23

Теги

Похожие вопросы