为第1列数据分配序号,当它到达空行时从1开始。使用awk或/和sed

时间:2015-01-23 16:23:49

标签: bash awk sed

我有一个由xy数据块组成的大数据文件,块由空行分隔。现在我想将所有x更改为一组序列号,并从1开始为下一个块。每个块中的行数可以不同。

输入:

165168 14653  
5131655 51365  
155615 1356  

13651625 13651  
12 51  
55165 51656 

64 64  
651456 546546   

期望的输出:

1 14653  
2 51365  
3 1356  

1 13651  
2 51  
3 51656  

1 64  
2 546546

2 个答案:

答案 0 :(得分:4)

我会用:

$ awk '!NF{i=0; print; next} {print ++i, $2}' file
1 14653
2 51365
3 1356

1 13651
2 51
3 51656

1 64
2 546546

解释

这是一个保持计数器i并正确重置的问题。

  • !NF{i=0; print; next}如果没有字段,也就是说,如果该行为空,则打印一个空行并重置计数器。
  • {print ++i, $2}否则,递增计数器并将其与第二个字段一起打印。

答案 1 :(得分:3)

甚至可能

awk '!NF { n=NR } NF { $1=NR-n } 1' file

因此,在空行中,我们将n设置为当前行号。在非空行上,我们将第一个字段更改为当前行号减去n。打印所有行。