数千和小数分离器都是相同的

时间:2014-01-01 19:00:47

标签: regex sed awk

我从一个看起来像这样的系统获得输出:

AA;12,320,11;12,32

基本上,系统使用相同的分隔符为数字和小数位格式化数字。

所需的输出如下:

AA;12,320.11;12.32

3 个答案:

答案 0 :(得分:1)

使用GNU awk for gensub():

$ cat file
AA;12,320,11;12,32

$ gawk 'BEGIN{FS=OFS=";"} {for (i=1;i<=NF;i++) $i=gensub(/,(..)$/,".\\1","",$i)}1' file
AA;12,320.11;12.32

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -r 's/,([0-9]+(;|$))/.\1/g' file

答案 2 :(得分:0)

使用Gnu awk版本4,你可以这样做:

awk -f a.awk file

其中a.awk

{
    n=patsplit($0,a,/[^;]+/,s)
    printf "%s%s%s",s[0],a[1],s[1]
    for (i=2;i<=n; i++) {
        m=patsplit(a[i],b,/[^,]+/,t)
        t[m-1]="."
        printf "%s",t[0]
        for (j=1;j<=n;j++)
            printf "%s%s",b[j],t[j]
        printf "%s",s[i]
    }
    print ""
}