这个awk打印声明中有什么问题?

时间:2016-02-19 12:03:10

标签: bash awk

我在下面有一个文件test.txt。每行包含一个值,值按照current1,voltage1,current2,voltage2,current3,voltage3的顺序为6个值的序列。下面是test.txt文件。

11
12
13
14
15
16
21
22
23
24
25
26
31
32
33
34
35
36
41
42
43
44
45
46

使用awk,我想以下面的格式打印它(一行中设置一个)。

11 12 13 14 15 16
21 22 23 24 25 26
31 32 33 34 35 36
41 42 43 44 45 46

所以我写了一个简单的awk脚本,如下所示。我运行一个从1到6运行的模块化计数器,根据cnt值,我将输入值分别保存在i1,v1,i2,v2,i3,v3中。当cnt为6时(当收集集合中的所有值时),我打印值。

BEGIN{cnt=1}
cnt == 1{i1 = $0}
cnt == 2{v1 = $0}
cnt == 3{i2 = $0}
cnt == 4{v2 = $0}
cnt == 5{i3 = $0}
cnt == 6{v3 = $0}
{if (cnt==6) {cnt = 1; print i1 v1 i2 v2 i3 v3} else cnt = cnt + 1}

结果如下所示,这很奇怪。我使用awk已经有一段时间了,所以我无法轻易找出脚本的错误。

awk -f div.awk test.txt
16
26
36
46

有什么问题?

1 个答案:

答案 0 :(得分:1)

使用模运算符。它应该是:

awk 'NR%6{printf "%s ",$0}!(NR%6){print}' file

顺便说一句,您的文件看起来像是使用Windows行结尾,这会导致您报告的错误。在使用awk之前将它们转换为UNIX,例如:

sed 's/\r//' file | awk 'NR%6{printf "%s ",$0}!(NR%6){print}'