根据其大小,在每行的开头添加前缀

时间:2016-01-25 01:49:22

标签: linux scripting

我有一个包含邮政编码和城市名称的文件,如下所示:

1234  foo
4321  foobar
64324 foofoobar
92001 bar

在数字和城市名称之间加一个\ t。我想使用sed或shell脚本

为每行添加前缀0和4个数字
01234 foo
04321 foobar
64324 foofoobar
92001 bar

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

假设所有邮政编码都是数字的,您可以使用printf中的awk命令执行任务,按照以下记录(v字符只是为了显示制表位是:)

pax> printf "v\tv\tv\n" ; cat infile
v       v       v
1234    rio     xyz
4321    munich  abc
64324   perth   def
92001   paris   qqq

pax> awk 'BEGIN {OFS = "\t"} {arg1 = $1; $1 = ""; printf "%05d%s\n", arg1, $0}' infile
01234   rio     xyz
04321   munich  abc
64324   perth   def
92001   paris   qqq

awk命令首先从每行中提取并删除第一个参数(a),然后将其与更改的行一起格式化。

您会注意到我还将输出字段分隔符设置为制表符,因为它似乎是您正在使用的内容。 可能可能不是必需的,它只取决于您希望输出数据与输入匹配的程度。

(a)从技术上讲,它只是将其设置为空字符串,参数本身仍然存在。这就是格式字符串中%05d%s之间没有标签的原因,因为标签仍然存在。

答案 1 :(得分:0)

sed 's/^\(....\)$/0\1/' filename

(但我认为,paxdiablo的答案更清晰。)