Переработка продукции Saxon

Попробуйте:

$ awk -F, -v OFS=, 'FNR==NR{a[$1]=$2; next} NF==1{$2=a[$1]} 1' source.txt test.txt 
A,1000
C,2500
D,5000
B,3000
E,4000

Как это работает:

  1. -F, -v OFS=,

    Это устанавливает запятую в качестве разделителя полей ввода и вывода.

  2. FNR==NR{a[$1]=$2; next}

    При чтении первого файла source.txtсохранить значение второго поля $2в ассоциативном массиве aпод ключом первого поля $1.Затем пропустите остальные команды и перейдите к строке next, чтобы начать заново.

  3. NF==1{$2=a[$1]}

    Если в текущей строке есть только одно поле, присвойте второму полю значение в ассоциативном массиве a.

  4. 1

    Это короткая -рука для печати строки .

Внесение постоянных изменений в файл

С любой версией awk мы можем сделать постоянное обновление файла test.txtс рекомендуемым ():

awk -F, -v OFS=, 'FNR==NR{a[$1]=$2; next} NF==1{$2=a[$1]} 1' source.txt test.txt >temp && mv temp test.txt

В качестве альтернативы, если у вас есть последняя версия GNU awk(, иногда называемаяgawk):

awk -i inplace -F, -v OFS=, 'FNR==NR{a[$1]=$2; print; next} NF==1{$2=a[$1]} 1' source.txt test.txt
0
05.07.2021, 20:41
0 ответов

Теги

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