2

我想使用 sed 或 awk 在一行格式化文本的中间添加一个零。

示例输入文件

line 1

line 2

line 3

预期产出

line 01

line 02

line 03
4

6 回答 6

2

您的问题有些模棱两可,但是如何使用printfwithawk用零填充第二个字段:

$ 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.

于 2013-01-05T17:29:44.727 回答
0

这可能对您有用(GNU sed):

sed 's/\</0/2' file
于 2013-01-05T21:54:10.093 回答
0

使用带有反向引用的 POSIX 字符类

给定/tmp/foo包含:

line 1

line 2

line 3

您可以调用sed 's/[[:digit:]]/0&/' /tmp/foo以获得以下输出:

line 01

line 02

line 03
于 2013-01-05T17:16:58.090 回答
0

在 awk 中,这很容易:

awk '{print $1, 0$2}' input.txt > output.txt

在这种情况下,您显示的输入文本在文件中input.txt,我将其保存到一个新文件output.txt中。

这也是一个容易理解的命令。变量是您的$1“行”文本,$2变量是您的号码。此命令假定您的“行”文本中没有空格。在那儿?

于 2013-01-05T17:17:39.227 回答
0

发布的问题的最简单答案是:

sed 's/ / 0/'

如果这样做不行,请发布一些更具代表性的输入和预期输出,因为您可能需要考虑很多事情。

于 2013-01-05T17:56:30.623 回答
0
awk 'NF==2{$2="0"$2}1' your_file
于 2013-01-07T07:12:56.830 回答