使用 Awk 在包含模式的行中插入 0 填充的递增数字

xek*_*kon 5 awk

我正在尝试替换这个:

行开头的数字始终是 3 位数字,用 0 填充,但是前面可能有空行或常规句子,如我的包含 echo 的完整示例所示。

227| Mathematics | 9 | search,seo |
038| Top Games | 2391 | search,seo,cookies |
136| Top Programming Languages | 219 | cookies |
Run Code Online (Sandbox Code Playgroud)

227.001| Mathematics | 9 | search,seo |
038.002| Top Games | 2391 | search,seo,cookies |
136.003| Top Programming Languages | 219 | cookies |
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的(这有效,但数字不是 0 填充的):

227| Mathematics | 9 | search,seo |
038| Top Games | 2391 | search,seo,cookies |
136| Top Programming Languages | 219 | cookies |
Run Code Online (Sandbox Code Playgroud)

我想我需要添加类似 'printf("%03d\n", ++i)' 的内容,但是当我尝试用它替换 ++i 时,它不起作用。

Gil*_*not 4

一种解决方案(您有很多选择^^):

<INPUT> | 
    awk '
        BEGIN{FS=OFS="|"}
        /^[0-9]{3}/{$1=$1 sprintf(".%03d", NR)}
        1
    '
Run Code Online (Sandbox Code Playgroud)

输出

Last Updated: Mar 15 2023

- Score: cumulative of benchmarking tools.
- KiB: total size of the page.
- Stats: metrics related to the page.

| Score | KiB | Stats |
| --- | --- | --- |
227.001| Mathematics | 9 | search,seo |
038.002| Top Games | 2391 | search,seo,cookies |
136.003| Top Programming Languages | 219 | cookies |
Run Code Online (Sandbox Code Playgroud)