添加重复行号

添加重复行号

我有一个大约 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

%在 上使用模(余数)运算符NRNR % 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

相关内容