我有
Andrew 123123
Mick 234234
Steve 345345
Bob 456456
需要出去
Andrew 123-1-23
Mick 234-2-34
Steve 345-3-45
Bob 456-4-56
尝试使用一些正则表达式替换,但不要知道如何记住fisrt" substr"将其替换为" substr - "。
答案 0 :(得分:1)
可能有更适合这项工作的工具,但如果你必须使用awk
,你可以这样做:
{print $1" "substr($2,1,3)"-"substr($2,4,1)"-"substr($2,5)}
根据以下成绩单:
$ echo 'Andrew 123123
Mick 234234
Steve 345345
Bob 456456' | awk '{print $1" "substr($2,1,3)"-"substr($2,4,1)"-"substr($2,5)}'
Andrew 123-1-23
Mick 234-2-34
Steve 345-3-45
Bob 456-4-56
$ echo 'Andrew 123456
Mick abcdef
Steve 314159
Bob xxxyzz' | awk '{print $1" "substr($2,1,3)"-"substr($2,4,1)"-"substr($2,5)}'
Andrew 123-4-56
Mick abc-d-ef
Steve 314-1-59
Bob xxx-y-zz
答案 1 :(得分:0)
如果你可以使用perl(好吧,好吧它等于sed,并且\ cite {@Beta}已经告诉我们该怎么做:) ...
perl -pe 's/\b(\d{3})(\d)(\d{3})\b/$1-$2-$3/g'
你需要根据你的长度调整数字......
<强>测试强>
使用前面的例子\ cite {@paxdiablo}
$ echo 'Andrew 123456
Mick abcdef
BBB 12345
Steve 314159
Bob xxxyzz' | perl -pe 's/\b(\d{3})(\d)(\d{2})\b/$1-$2-$3/g'
Andrew 123-4-56
Mick abcdef
BBB 12345
Steve 314-1-59
Bob xxxyzz
答案 2 :(得分:0)
这真的是sed的工作,因为它只是单行上的简单替换,但这里是修改后的输入文件的GNU awk,其中包含几个7位第二字段加上一个6和一个8:
$ cat file
Andrew 1231239
Mick 234234
Steve 3453457
Bob 45645623
$
$ awk '{$2=gensub(/^(...)(.)(...)$/,"\\1-\\2-\\3","",$2)}1' file
Andrew 123-1-239
Mick 234234
Steve 345-3-457
Bob 45645623