我有一个大约 10k 行的文件。我想将行号添加到第一列,但以重复行号 1-100 的方式。例如,
1 12313
2 3434
.
.
.
100 4233
1 24523
.
.
.
100 4543543
1
.
.
.
100
我怎样才能使用 grep 或 awk 来做到这一点?我设法打印行号,但没有重复使用 awk
awk '{ print NR, $1 }' p2.dat > p3.dat
答案1
%
在 上使用模(余数)运算符NR
。NR % 100
会给出 1,2,3...99,0,1,2...,所以需要一些调整。这应该做:
awk '{ print (NR-1) % 100 + 1, $1 }' p2.dat > p3.dat
这当然是对这个问题的回答原来的问题,不是修改后的。
答案2
这似乎适用于最少的循环:
awk '{ printf("%0.0f ",(NR/100.001)+.5) ;print $1 }' p2.dat > p3.dat
演示,打印第一个10数字,并以组为单位3前缀增量:
seq 10 | awk '{ printf("%0.0f ",(NR/3.001)+.5) ;print $1 }'
输出:
1 1
1 2
1 3
2 4
2 5
2 6
3 7
3 8
3 9
4 10
注意:awk
舍入显示了一些二进制转换故障。上面的代码使用了 , 等这样的表达式(NR/3.001)+.5)
,这样写起来会更清晰(NR/3)+.5)
,甚至(NR*(1/3))+.5)
。不幸的是这些不起作用:
# WRONG: (rounding errors), shows four '2's, etc.
seq 10 | awk '{ printf("%0.0f ",(NR/3)+.5) ;print $1 }'
1 1
1 2
2 3
2 4
2 5
2 6
3 7
3 8
4 9
4 10