awk NR%2{}1 含义

awk NR%2{}1 含义

我试图理解这段代码:

awk 'NR%2{printf "%s ",$0;next;}1' yourFile

现在我尝试定制它。

鉴于此 error.txt 内容:

KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1

然后:

awk 'NR%2{printf NR "%s ", $0; next}1' error.txt

... 将返回:

1KEY 4048:1736 string 3
3KEY 0:1772 string 1
5KEY 4192:1349 string 1
7KEY 7329:2407 string 2
9KEY 0:1774 string 1

我猜是NR%2指偶数行号,但我不确定它1指的是什么。
如果没有1awk 'NR%2{printf NR "%s ", $0; next}' error.txt 将返回一行。

1KEY 4048:1736 string 3KEY 0:1772 string 5KEY 4192:1349 string 7KEY 7329:2407 string 9KEY 0:1774 string 

总的来说,我还是没明白。

到目前为止我已经看过这些页面:

答案1

%模/余数算术运算符,求两个或多个数字的模除法。这NR中的 表示当前记录号除以 2,写为条件语句,偶数记录数的结果为 0,因此 0 是错误结果,因此后面的行动不执行并且;

最后1,将执行一个称为“始终为真”条件的习惯用法,该习惯用法将打印前几行末尾的偶数行号(只要结果为NR%20 就运行),其中这些行号是printf不带换行符打印的。看awk 脚本末尾的“1”是什么意思

答案2

找一个很多更好的全面解决方案:

gawk/mawk/nawk '(ORS=ORS?"":"\n")~_'

因为默认情况下 awkORS总是预先填充一个\n,所以此方法始终确保将偶数行连接到其上方的行,而不必NR % 2在需要测试 ORS 是否为空字符串时浪费时间。

==========下面是旧帖子================================

您可以将条件带入内部,而无需接下来的所有内容:

gawk/mawk/nawk '{ printf("%s%c",$0,23^(NR%2)+9) }'

在奇数行上,NR%2计算结果为 1(真),

  • so 23^1+9 = 32 = ascii space.

对于偶数行,它得到 0/false,

  • so 23^0+9 = 1+9 = 10 = ascii new line \n

相关内容