Проблема, с которой вы столкнулись, заключается в том, что вы не закрываете команду, которую вы передаете на свой getline
.Вы пишете:
"echo -n "$6" | tail -c 3" | getline terminalCountry
Awk делает следующее с этим:
Если одно и то же имя файла или одна и та же команда оболочки используются с getline более одного раза во время выполнения программы awk,файл открывается (или команда выполняется) только в первый раз.В это время первая запись ввода читается из этого файла или команды.В следующий раз, когда тот же файл или команда будет использоваться с getline
, из него будет считана другая запись и т. Д.
Это означает, что если у вас есть различные $6
, которые идентичны, ваша команда будет работать толькоправильно с первого раза.Кроме того, он откроет «файл», в который команда также записывает свой вывод.Если у вас много много записей, он будет постоянно открывать файлы и никогда не закроет их, что приведет к ошибке.
Для правильного рабочего порядка вы должны снова закрыть «файл».То есть вы должны написать:
command="echo -n \047" $6 "\047 | tail -c 3"
command | getline terminalCountry
close(command)
Но здесь это выглядит как излишнее убийство, вас может заинтересовать:
terminalCountry=substr($6,length($6)-3)
Интересные чтения: