awk 'NR%2==1'、awk 'FNR%2' 和 sed 'n 之间有区别吗?d'?



我目前正在为一场大型比赛做准备。以下三个命令之间有区别吗?exercise要求我们每隔一行打印一个命令ls -l,从第一行开始。

第一个命令:

ls -l | awk 'NR%2==1'

第二:

ls -l | awk 'FNR%2'

第三:

ls -l | sed 'n;d'

我写了第三个。前两个,我不确定我是否理解他们做什么。

awk中,NRFNR是当前输入行的记录编号,从第一行的1开始。如果处理多个输入文件,则在每个文件的开头,FNR会重置回1,而NR会不断递增。在您的情况下,由于输入来自stdin而不是命名文件,因此这两个变量是等效的。

%是模算子,x % yx除以y时的余数。它通常用于通过使用y = 2来确定一个数字是奇数还是偶数;偶数具有余数0、奇数具有余数1

awk '<expression>'

只要<expression>为真,就会打印当前输入记录。当CCD_ 19为奇数时(如上所述(,CCD_。FNR % 2在同样的情况下也是真的,因为任何非零的数都被认为是真的。

因此,两个awk命令都打印ls -l输出的奇数行。

最新更新