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)
谢谢你。
简单地:
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)
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |