重新编号列表,但不是顺序

Koo*_*234 2 linux shell-script text-processing

在 shell 脚本中,有没有办法只对列表重新编号,而不对列表中的内容重新编号?例如:

3. cat
1. hat
2. mouse
Run Code Online (Sandbox Code Playgroud)

并将其更改为:

1. cat
2. hat
3. mouse
Run Code Online (Sandbox Code Playgroud)

谢谢你。

ImH*_*ere 6

简单地:

awk '$1=NR "."'
Run Code Online (Sandbox Code Playgroud)

这会将第一个字段(空格前的第一个文本)更改为行(记录)编号和一个点。由于记录号始终为正数且大于 0,因此分配的结果将始终为真,从而导致在第一个字段更改的情况下打印行(记录)。

随着第一个字段的更改,NF(字段数)和零字段($0)被重新计算,将所有重复的空白转换为一个空格。

即:具有多个相邻空格(和制表符)的行合并为一个空格。

如果需要从 awk 处理中挽救多个空间,它会变得更加复杂(只有 GNU awk 有 patsplit):

awk '{
       n=patsplit($0,f,/[^ \t\n]+/,s);   # split the line storing whitespace.
       f[1] = NR "."                     # only change actually needed.
       for(i=0;i<=n;i++)                 # for all fields (and separators)
       {  
          printf("%s%s",f[i],s[i])       # print each field and separator.
       }
       print("")                         # cause the printing of an OFS
     }
    ' patsplitfile
Run Code Online (Sandbox Code Playgroud)