Объединение ввода из двух файлов в awk

Я немного читал о awk. Это оказалось чрезвычайно полезным для одиночных данных. Предположим, у меня есть два входных файла:

## inp1
x y
1 3
2 4
6 9
... 

## inp2
x z
1 5
2 19
6 9

Я хочу вывести что-то, что «объединяет» оба файла. Что-то вроде:

## output
x y z
1 3 5
2 4 19
6 9 9

Я могу придумать такие идеи, как чередование этих двух файлов, например: https://stackoverflow.com/questions/4011814/how-to-interleave-lines-from-two-text-files и что-то делать с awk.

Или, может быть, что-то с использованием ассоциативных массивов? Однако я не слишком уверен, что является причиной этого вопроса;).

Я использую Linux.

1
13.06.2020, 18:08
1 ответ

Использованиеawk:

  • Метод 1
    awk 'FNR==NR{a[FNR]=$2;next}{print $1,a[FNR],$2}' f1 f2
    
  • Метод 2
    awk 'NR==FNR{a[$1];a[FNR]=$2;next}($1 in a) {print $1,a[FNR],$2}' f1 f2
    

Выход

x y z
1 3 5
2 4 19
6 9 9
0
18.03.2021, 23:27

Теги

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