我是AWK初学者,并且在使用内置变量NR之后,我不了解以下内容 文字:
C:\Users\gdog1\Desktop\proj\intparser.py:42: ParserGeneratorWarning: 4
shift/reduce conflicts
return self.pg.build()
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.3\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "C:/Users/gdog1/Desktop/proj/main.py", line 20, in <module>
parser.parse(tokens).eval()
File "C:\Python27\lib\site-packages\rply\parser.py", line 60, in parse
self.error_handler(lookahead)
File "C:\Users\gdog1\Desktop\proj\intparser.py", line 39, in error_handler
raise ValueError("Ran into a %s where it wasn't expected" %
token.gettokentype())
ValueError: Ran into a SAY where it wasn't expected
使用
CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,sylvain,team:::admin
52,01 dec 2018,sonia,team
52,01 dec 2018,sonia,team
因此,我期望在使用NR> 2 && NR <5时获得相同的结果。这是我得到的:
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
您能告诉我,为什么在使用awk'{print NR}'文件时,最后一行为什么不显示从数字到3到4的计数?不能将一系列NR与命令print混合吗?
谢谢!
答案 0 :(得分:2)
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}
的行为不像awk
的{{1}}的默认方法,请运行以下命令:
regexp/condition_check{action}
查看输出将提供的内容:
awk '{print (NR>2&&NR<5)}' Input_file
请参见第3行和第4行,即0
0
1
1
0
0
0
0
0
0
表示该行的条件为TRUE,而1
表示该行的条件为FALSE。因此,如果像上面提到的那样在0
中使用条件,我们可以看到它在print
语句中打印条件的STATE。