【问题标题】:awk - using printf to format only one field of output? [duplicate]awk - 使用 printf 仅格式化一个输出字段? [复制]
【发布时间】:2016-09-28 03:49:59
【问题描述】:

一个非常基本的查询,但我无法解决。我是一个非常基本的awk用户。

我希望将一个文件(不超过 100 条记录)放入 awk,并输出仅通过在每行开头添加行号(0 填充)修改的文件。 p>

因此,输入文件:

Lorem ipsum dolor sit amet consectetur adipiscing elit
sed do eiusmod tempor incididunt ut labore et

dolore magna aliqua Ut enim ad minim veniam
...

输出文件:

001 Lorem ipsum dolor sit amet consectetur adipiscing elit
002 sed do eiusmod tempor incididunt ut labore et
003
004 dolore magna aliqua Ut enim ad minim veniam
...

我做行号的小班轮去(很明显)

awk '{print NR, $0}' *infile*

我从中得到

1 Lorem ipsum dolor sit amet consectetur adipiscing elit
2 sed do eiusmod tempor incididunt ut labore et
3
4 dolore magna aliqua Ut enim ad minim veniam
...

注意输入文件有空白记录需要保留(但最好输出无编号)

我也知道我能做到

awk '{printf "%03i", NR}' infile

给我

001
002
003
...

我看不到如何将两者结合起来。

我在 Linux 上使用 awk/gawk 4.0.1,所以如果有其他方法可以做我想做的事,我可以使用其他常用的 Linux 工具箱。

【问题讨论】:

    标签: linux bash awk printf


    【解决方案1】:

    您可以使用printf打印数字,然后打印内容:

    awk '{printf "%03i %s\n", NR, $0}' *infile*
    

    03i 将打印行号 - NR%s 将打印当前行 - $0。剩下的就是格式化 - 需要在两者和\n 之间添加空格,以便在每行之间换行。

    【讨论】:

    • 完美。谢谢。
    【解决方案2】:

    您可以使用nl from the GNU coreutils 为您的行编号:

    nl -w 3 -n rz -s ' ' infile
    
    • -w (--number-width) 表示要为行号保留多少列
    • -n (--number-format) 说如何格式化数字; rz 是“右对齐,前导零”
    • -s (--number-separator) 是插入数字和行本身之间的字符串;在这种情况下,一个空格

    这默认跳过空行:

    $ nl -w 3 -n rz -s ' ' infile
    001 Lorem ipsum dolor sit amet consectetur adipiscing elit
    002 sed do eiusmod tempor incididunt ut labore et
    
    003 dolore magna aliqua Ut enim ad minim veniam
    

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多