попробовать:
awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1
Выход:
111 000 444
222 111 555
333 555 666
Объяснение вышеуказанного кода:
FNR==NR
позволяет работать с одним целым файлом за раз. В данном случае это файл f2
. NR
и FNR
содержат номера строк с разницей FNR
, сбрасываемой в 1, когда читается новый файл, где значение NR
продолжает увеличиваться.
- Пока мы работаем с файлом
f2
, мы создаем массив с именем a
, используя номер строки (NR
) в качестве key
и третий столбец ($3
) в качестве значения. next
позволяет нам пропустить оставшуюся часть блока действий.
- Как только файл
f2
заканчивается, мы начинаем работать с файлом f1
. Условие NR==FNR
не станет ложным, поскольку FNR
будет увеличиваться с 1, а NR
- нет. Таким образом, будет обработан только второй блок действий {$2=a[FNR]}
.
- Что делает этот блок, так это повторно присваивает значение второго столбца значению массива путем поиска номера строки.
1
в конце печатает строку. Возвращает true, а в awk
true заявления приводят к печати строки.
f2 f1
- порядок файлов, определенных. Поскольку мы хотим создать массив из файла f2
, мы ставим его первым.