Как предотвратить печать на стандартный вывод из сценария awk ** ** (не из cli)

Насколько я понимаю ограниченное , дерево устройств - это описание оборудования, предназначенное для (множества) систем ARM. Он все еще в некоторой степени меняется, и рабочая поддержка появилась совсем недавно. Я помню, что это началось в Linux 3.x, вероятно, 2.x уже нет. И ядро ​​должно быть настроено с его помощью, новые (4.x) ядра зависят почти исключительно от него при настройке. Но такое ядро ​​могло взорваться на старом оборудовании.

1
14.03.2019, 01:14
1 ответ

Только ошибка

FNR > 1          # skip header
{ 

что должно быть

FNR > 1 {        # skip header

Блок кода с условием должен начинаться на той же строке, что и условие.

То, что ваш исходный скрипт на самом деле делает, является первым

FNR > 1

Печатаются все строки, начиная со второй строки. (Действие по умолчанию, когда условие не имеет связанного блока кода, заключается в печати текущей записи, если условие истинно, как если бы блок был{ print }).

Затем он применяет блок, следующий за этим, к каждой строке (, поскольку этот блок не имеет связанного условия ).

Это не особенность GNU awk. Все реализации awkдолжны действовать так.


Что касается других частей сценария:

    } else {
        print > "/dev/null"  # print nothing
    }

Это можно было бы удалить, оставив

#!/usr/bin/awk -f

BEGIN { FS = "," } 

FNR > 1 {   
    if ( $1 == $2 ) {
        if ( NR == 4 )
            printf("*** Print NR=4 ok.\n")
    } else
        printf("=== Fields 1 and 2 not equal (NR=%s).\n", NR)
}

или,

#!/usr/bin/awk -f

BEGIN { FS = "," } 

FNR == 1 { next }

$1 == $2 && NR == 4 { printf("*** Print NR=4 ok.\n") }
$1 != $2            { printf("=== Fields 1 and 2 not equal (NR=%s).\n", NR) }
4
27.01.2020, 23:22

Теги

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