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

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/

10-11 22:37