我有一个包含邮政编码和城市名称的文件,如下所示:
1234 foo
4321 foobar
64324 foofoobar
92001 bar
在数字和城市名称之间加一个\ t。我想使用sed或shell脚本
为每行添加前缀0和4个数字01234 foo
04321 foobar
64324 foofoobar
92001 bar
感谢您的帮助。
答案 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的答案更清晰。)