繁体   English   中英

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

[英]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'

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

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

%是模运算符, x % yx除以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM