我试图理解这段代码:
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
指的是什么。
没有1
, awk '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
总的来说,我仍然没有得到它。
到目前为止,我已经查看了这些页面:
即Modulus/Remainder 算术运算符
%
,它找到两个或多个数字的模除法。in awk 表示当前记录号,它被 2 除以作为条件语句写入,对于偶数记录号,结果为 0,因此 0 是错误结果,因此不执行后续操作,并且;NR
1
最后,将执行一个被称为“始终为真”条件的习语,该条件将在前几行的末尾打印偶数行号(只要结果为 0,它就会运行)NR%2
,这些行号在printf
不换行的情况下打印。请参阅awk 脚本末尾的“1”是什么意思找到了一个更全面的解决方案:
因为默认情况下 awk
ORS
总是预先填充一个\n
,所以这种方法总是确保将偶数行连接到它上面的行,而不必浪费时间做NR % 2
所有需要测试 ORS 是否为空字符串的事情。===========下面的旧帖子================================
您可以在没有所有下一个内容的情况下将条件带入内部:
在奇数行上,
NR%2
计算结果为 1(真),so 23^1+9 = 32 = ascii space.
对于偶数行,它得到一个 0/false,
so 23^0+9 = 1+9 = 10 = ascii new line \n