Вот для новичков, чтобы облегчить атмосферу:
Какая ваша любимая история из BOFH?
Для этой задачи более простым инструментом, чем 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
:соедините эти два файла. Насколько я понимаю, вы хотите вывести только те поля, ключ которых присутствует в обоих файлах, с обоими значениями. Как упоминалось в ответе Спархока , правильным инструментом для этого является 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
)и для каждой строки, если значение было замечено в первом файле, выводит ключ, сохраненное значение и значение в текущем файле.