为第一列数据分配序号,到达空白行时从 1 开始。使用 awk or/and sed

assign sequential number for 1st column of data and start from 1 when it reaches a blank line. using awk or/and 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

我会使用:

$ awk '!NF{i=0; print; next} {print ++i, }' 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, } 否则,递增计数器并将其与第二个字段一起打印。

甚至可能

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

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