Разница в AWK при использовании NR с и без печати - PullRequest
0 голосов
/ 19 января 2019

Я новичок в AWK и после игры со встроенной переменной NR я не понимаю следующее Текст:

CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,sylvain,team:::admin
52,01    dec   2018,sonia,team
52,01    dec   2018,sonia,team

с использованием

awk 'NR' file 
CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,sylvain,team:::admin
52,01    dec   2018,sonia,team
52,01    dec   2018,sonia,team

awk '{print NR}' file 
1
2
3
4

Таким образом, я ожидал таких же результатов при использовании NR> 2 && NR <5. Вот что я получил: </p>

awk 'NR>2&&NR<5' file
52,01    dec   2018,sonia,team
52,01    dec   2018,sonia,team

awk '{print NR>2&&NR<5}' file
Nothing shows up

Не могли бы вы сказать мне, почему в последней строке не показано число от 3 до 4, отображаемое при использовании файла awk '{print NR}'? Не возможно смешать диапазон NR с командой print?

Заранее спасибо!

1 Ответ

0 голосов
/ 19 января 2019

awk 'NR>2&&NR<5' Input_file - это место, где мы проверяем условие, если номер строки больше 2 и больше 5, затем выполняем действие по умолчанию, которое печатает текущую строку.

В вашем коде awk '{print NR>2&&NR<5}' Input_file, здесь вы используете print, а затем упоминаете условие, которое НЕ работает awk.

awk работает по методу:

Condition_check/regexp{action}

если действие НЕ задано, то по умолчанию произойдет печать текущей строки, что происходит в вашем первом коде.

Дополнительный анализ: Чтобы доказать, что точка {print NR>2&&NR<5} НЕ будет вести себя как метод по умолчанию awk из regexp/condition_check{action}, запустите:

awk '{print (NR>2&&NR<5)}' Input_file

Смотрите вывод, что он даст:

0
0
1
1
0
0
0
0
0
0

См. Строки 3 и 4, в которых 1 означает, что условие для этой строки - ИСТИНА, а 0 означает, что условие для этой строки - ЛОЖЬ. Таким образом, мы можем видеть, что он печатает STATE условия в выражении print, если мы используем условие в (..), как упомянуто выше.

...