[英]Is there a difference between awk 'NR%2==1', awk 'FNR%2', and sed 'n;d'?
我目前正在准备一场大型比赛。 下面三个命令有区别吗? 练习要求我们打印命令ls -l
每一行,从第一行开始。
第一条命令:
ls -l | awk 'NR%2==1'
第二:
ls -l | awk 'FNR%2'
第三:
ls -l | sed 'n;d'
我写了第三个。 前两个,我不确定我理解他们做什么。
在awk
, NR
和FNR
是当前输入行的记录号,第一行从1
开始。 如果您正在处理多个输入文件, FNR
会在每个文件的开头重置为1
,而NR
会不断增加。 在您的情况下,由于输入来自stdin
而不是命名文件,因此这两个变量是等效的。
%
是模运算符, x % y
是x
除以y
时的余数。 它通常用于通过使用y = 2
来确定一个数字是奇数还是偶数; 偶数余数为0
,奇数余数为1
。
awk '<expression>'
只要<expression>
为真,就会打印当前输入记录。 当NR
为奇数时, NR % 2 == 1
为真(如上所述)。 FNR % 2
在同样的情况下也是真的,因为任何非零数字都被认为是真的。
所以两个awk
命令都打印ls -l
输出的奇数行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.