我目前正在为一场大型比赛做准备。以下三个命令之间有区别吗?exercise要求我们每隔一行打印一个命令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>
为真,就会打印当前输入记录。当CCD_ 19为奇数时(如上所述(,CCD_。FNR % 2
在同样的情况下也是真的,因为任何非零的数都被认为是真的。
因此,两个awk
命令都打印ls -l
输出的奇数行。