我想使用 sed 或 awk 在一行格式化文本的中间添加一个零。
示例输入文件
line 1
line 2
line 3
预期产出
line 01
line 02
line 03
您的问题有些模棱两可,但是如何使用printf
withawk
用零填充第二个字段:
$ awk 'NF==2 { printf "%s %02d\n", $1, $2}' file
line 01
line 02
line 03
line 10
line 100
$ awk 'NF==2 { printf "%s %04d\n", $1, $2}' file
line 0001
line 0002
line 0003
line 0010
line 0100
如果您不想删除空行,请执行awk 'NF==2 { printf "%s %04d\n", $1, $2} NF!=2' file
.
这可能对您有用(GNU sed):
sed 's/\</0/2' file
给定/tmp/foo包含:
line 1
line 2
line 3
您可以调用sed 's/[[:digit:]]/0&/' /tmp/foo
以获得以下输出:
line 01
line 02
line 03
在 awk 中,这很容易:
awk '{print $1, 0$2}' input.txt > output.txt
在这种情况下,您显示的输入文本在文件中input.txt
,我将其保存到一个新文件output.txt
中。
这也是一个容易理解的命令。变量是您的$1
“行”文本,$2
变量是您的号码。此命令假定您的“行”文本中没有空格。在那儿?
发布的问题的最简单答案是:
sed 's/ / 0/'
如果这样做不行,请发布一些更具代表性的输入和预期输出,因为您可能需要考虑很多事情。
awk 'NF==2{$2="0"$2}1' your_file