使用带打印和不带打印的 MR 时 AWK 的差异

Difference in AWK when using NR with and withou print

我是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 时得到相同的结果。这是我得到的:

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

你能告诉我为什么最后一行没有像使用 awk '{print NR}' 文件时显示的那样显示从数字到 3 到 4 的计数吗?无法将一系列 NR 与命令 print 混合使用?

提前致谢!

awk 'NR>2&&NR<5' Input_file 是我们检查条件的地方,如果行号大于 2 且大于 5,则执行打印当前行的默认操作。

在您的代码 awk '{print NR>2&&NR<5}' Input_file 中,您使用的是打印,然后提到条件,这不是 awk 的工作方式。

awk 适用于以下方法:

Condition_check/regexp{action}

如果没有给出任何操作,那么默认情况下将打印当前行,这在您的第一个代码中发生。

更多分析: 为了证明点 {print NR>2&&NR<5} 不会像 regexp/condition_check{action} 运行 的 awk 的默认方法这样:

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

查看输出结果:

0
0
1
1
0
0
0
0
0
0

见第 3 行和第 4 行,1 表示该行的条件为真,0 表示该行的条件为假。因此,如果我们像上面提到的那样在 (..) 中使用条件,我们可以看到它在 print 语句中打印条件的状态。