Система awk неправильно устанавливает переменные - PullRequest
0 голосов
/ 13 июня 2011

У меня проблема с назначением переменной переменной grep (используется в system () в nawk).

nawk '{
CITIZEN_COUNTRY_NAME = "INDIA"
CITIZENSHIP_CODE=system("grep "CITIZEN_COUNTRY_NAME " /tmp/OFAC/country_codes.config   | cut -d @ -f1")
 }'/tmp/*****

Значение IND отображается в консоли, но когда я даю printf, значение кода гражданства равно 0 - Можете ли вы помочь мне здесь

printf ("Теги страны |% s |% s \ n", CITIZEN_COUNTRY_NAME, CITIZENSHIP_CODE)

Содержимое файла country_codes.config

IND@INDIA
IND@INDIB
CAN@CANADA

Ответы [ 2 ]

1 голос
/ 13 июня 2011

система возвращает значение выхода вызванной команды, но результат команды не возвращается в awk (или nawk). Чтобы получить вывод, вы хотите использовать getline напрямую. Например, вы можете переписать ваш скрипт:

awk ' {
file = "/tmp/OFAC/country_codes.config";
CITIZEN_COUNTRY_NAME = "INDIA";
FS = "@";
while( getline < file ) {
    if( $0 ~ CITIZEN_COUNTRY_NAME ) {
        CITIZENSHIP_CODE = $1;
    }
}
close( file );
}'
0 голосов
/ 13 июня 2011

Предварительно загрузите файл конфигурации с помощью awk:

nawk '
  NR == FNR {
    split($0, x, "@")
    country_code[x[2]] = x[1]
    next
  }
  {
    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
  }
' country_codes.config  filename
...