我有一个写着邮政编码和城市名称的文件,如下所示:
1234 foo
4321 foobar
64324 foofoobar
92001 bar
数字和城市名之间有一个T。我想使用sed或shell脚本将前缀0添加到每行4个数字
01234 foo
04321 foobar
64324 foofoobar
92001 bar
谢谢你的帮助。
最佳答案
假设所有的邮政编码都是数字,您可以根据下面的文字记录,使用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
之间不需要制表符的原因,因为制表符仍然存在。关于linux - 根据其大小在每行开头添加前缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34983928/