Кажется, у вас есть несколько странных опечаток в вашей попытке. Вы хотите заменить $ 9 значением из массива, если оно определено. Кроме того, вы хотите убедиться, что Awk использует двоеточие в качестве разделителя как на входе, так и на выходе.
awk -F : 'BEGIN { OFS=FS }
NR==FNR{a[$1]=$2; next}
$1 in a {$9 = a[$1] } 1' 2.txt 1.txt
Обратите внимание, что 2.txt
является первым, так что NR==FNR
верно, когда вы читаете этот файл, но не когда вы начинаете читать 1.txt
. next
в первом блоке не позволяет Awk выполнить второе условие, пока вы читаете первый файл. И последний 1
является сокращением для безусловного print
, которое, конечно, будет выполняться для каждой строки во втором файле, независимо от того, заменяли ли вы что-либо.