Замените командой сокращения в сценарии AWK

У меня есть файл структурированного текста test.tr, и я хотел бы проанализировать его со сценарием AWK, но для особой причины я хочу получить все числа, окруженные символами нижнего подчеркивания, например: _0_ должен стать 0. Это - пример входного текстового файла: s 0.000000000 _0_ RTR

Таким образом, я пытаюсь использовать cut управляйте в сценарии AWK следующим образом:

# AWK script
BEGIN{
 # initialization
 highest_node_id = 0;
}
{
    node_id = $3
    node_id = node_id | cut -d "_" -f2 | cut -d "_" -f1 ;# this line causes error 
    if (node_id > highest_node_id) {
        highest_node_id = node_id;
    }
}
END{
 #print results
}

Но я получаю ошибку

awk: `analyze.awk: line 37: syntax error at or near cut`

тогда как та же команда работает хорошо в сценарии удара.

Что мне делать?

0
задан 15 November 2017 в 17:26

2 ответа

cut работает в скрипте bash, но shell это оболочка, а awk это awk. Вы не можете использовать команды perl в скриптах awk.

Если вы хотите, чтобы в вашем скрипте были внешние программы, вам нужно использовать команду system, но для того, что вы здесь делаете, вы должны использовать строковые функции из awk, такие как substr и gensub .

0
ответ дан 15 November 2017 в 17:26

Я наконец заставил его работать, используя substr:

tmp_node_id = $3;
node_id = substr(tmp_node_id, 2, (length(tmp_node_id) - 2));
printf ("node %s\n", node_id);
0
ответ дан 15 November 2017 в 17:26

Другие вопросы по тегам:

Похожие вопросы: