uri*_*iel 11
特殊END
模式仅在所有输入结束后才匹配.请注意,此模式不能与任何其他模式组合使用.
更有用的可能是getline
伪函数,它重置$0
到下一行并返回1,或者在EOF返回0的情况下!我认为这就是你想要的.
例如:
awk '{ if(getline == 0) { print "Found EOF"} }'
Run Code Online (Sandbox Code Playgroud)
如果您只处理一个文件,这将是等效的:
awk 'END { print "Found EOF" }'
Run Code Online (Sandbox Code Playgroud)
你有两个选择,两种都很混乱.
您可能需要稍微使用#2来运行它,但它应该可以工作.自从我做了任何awk以来已经有一段时间了.
这些是按照从最好到最差的顺序做你想做的事情的唯一明智的方法:
awk 'NR==FNR{max++; next} FNR == max { print "Final line:",$0 }' file file
awk -v max="$(wc -l < file)" 'FNR == max { print "Final line:",$0 }' file
awk 'BEGIN{ while ( (getline dummy < ARGV[1]) > 0) max++; close(ARGV[1])} FNR == max { print "Final line:",$0 }' file
Run Code Online (Sandbox Code Playgroud)
gawk实现有一个特殊的规则,称为ENDFILE
在处理参数列表中的每个文件后将触发该规则。这有效:
awk '{line=$0} ENDFILE {print line}' files...
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到更多详细信息>>