Я пытаюсь использовать awk
для сопоставления двух файлов (файл1 и файл2).Для каждой строки столбца в file2, которая соответствует file1, я бы хотел, чтобы команда распечатала второй столбец в file1.
Я рассмотрел несколько решений здесь и нашел что-то, что сработало (частично), но Я не понимаю, как это работает.
awk 'NR==FNR {a[$1]=$2; next} $1 in a{print a[$1]}' file1 file2 >> output
Вот пример ввода:
#File1
0_1 apple
0_2 mango
0_3 banana
...
3_1 durian
3_4 dragonfruit
3_20 pear
#File2
0_1 3_1
0_1 3_1
0_2 3_4
0_3 3_20
Команда awk выше возвращает желаемый результат, когда я сопоставляю первый столбец File2 с File1.
#Output
apple
apple
mango
banana
Поэтому, естественно, я немного изменил строку, чтобы сделать то же самое для второго столбца в File2.
awk 'NR==FNR {a[$1]=$2; next} $2 in a{print a[$1]}' file1 file2 >> output
Но я получаю те же результаты, что и выше, когда я ожидаю:
#Expected output
durian
durian
dragonfruit
pear
Что еще хуже, я получаю желаемоевывод, когда я делаю это:
awk 'NR==FNR {a[$1]=$2; next} $1 in a{print a[$2]}' file1 file2 >> output
Может кто-нибудь объяснить мне логику этого (присвоение значений массивам) или что-то пошло не так в другом месте?