Это довольно интересный awk
код.Проблема в том, что ваше первое условие, NR == FNR
, активно для каждой записи, считываемой из первого файла - файла country_codes.config, но действие обработки содержит next
, поэтому после того, как он прочитает запись, разделит ее и сохранитон идет и читает следующую запись, не выполняя второй блок скрипта awk
.В конце это сделано - больше ничего не нужно делать, поэтому он никогда ничего не печатает.
Это работает разумно:
processbody()
{
awk '
{
split($0, x, "@")
country_code[x[2]] = x[1]
#next
}
END {
CITIZEN_COUNTRY_NAME = "INDIA"
if (CITIZEN_COUNTRY_NAME in country_code) {
value = country_code[CITIZEN_COUNTRY_NAME]
} else {
value = "null"
}
print "found " value " for country name " CITIZEN_COUNTRY_NAME
} ' /tmp/country_codes.config
}
# Main program starts here
processbody
Это производит вывод:
found IND for country name INDIA
Как отмечает Hai Vu , вы можете использовать встроенные средства разделения записей awk
, чтобы упростить жизнь:
processbody()
{
awk -F@ '
{ country_code[$2] = $1 }
END {
CITIZEN_COUNTRY_NAME = "INDIA"
if (CITIZEN_COUNTRY_NAME in country_code) {
value = country_code[CITIZEN_COUNTRY_NAME]
} else {
value = "null"
}
print "found " value " for country name " CITIZEN_COUNTRY_NAME
} ' /tmp/country_codes.config
}
# Main program starts here
processbody