Попробуйте:
$ 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
Как это работает:
-F, -v OFS=,
Это устанавливает запятую в качестве разделителя полей ввода и вывода.
FNR==NR{a[$1]=$2; next}
При чтении первого файла source.txt
сохранить значение второго поля $2
в ассоциативном массиве a
под ключом первого поля $1
.Затем пропустите остальные команды и перейдите к строке next
, чтобы начать заново.
NF==1{$2=a[$1]}
Если в текущей строке есть только одно поле, присвойте второму полю значение в ассоциативном массиве a
.
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