为第一列数据分配序号,到达空白行时从 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
。打印所有行。
我有一个由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
。打印所有行。