0

我有一个这样的文件:

hgfjk
AX-75183725 2 2 -1 2 1 2 -1 0

我想分别替换-1, 0,12, NA,0101和。所以我会得到:01020202

hgfjk
AX-75183725 0202 0202 NA 0202 0101 0202 NA 0101

我使用这个命令:

awk 'NR == 1 { print; next } NR>1{a=$1;$1="@";gsub(/ -1\>/,"NA");gsub(/<0\>/,"0101");gsub(/<1\>/,"0102");gsub(/\<2\>/,"0202");$1=a;print}' file > out

这给了我这个输出:

hgfjk
AX-75183725 0202 2NA 0202 0102 2NA 0101

不知道怎么回事!!有人可以帮忙吗谢谢

4

1 回答 1

2

我将创建一个包含要替换的值的数组。并将计算除第一个字段之外的每个字段的每个位置。

awk '
    BEGIN {
        subs="NA 0101 0102 0202";
        split( subs, subs_arr );
    }
    NR == 1 { 
        print; 
        next 
    } 
    NR>1{
        for ( i = 2; i <= NF; i++ ) {
            $i = subs_arr[ $i + 2 ];
        }
        print
    }
' file

运行之前的命令,将得到以下输出:

hgfjk
AX-75183725 0202 0202 NA 0202 0102 0202 NA 0101

编辑gsub(/<0\>/,"0101"):我给出了一个解决方案,但我猜你的解决方案因为and不起作用gsub(/<1\>/,"0102")。你也应该逃跑<,比如:gsub(/\<0\>/,"0101")gsub(/\<1\>/,"0102")

于 2012-07-24T10:41:35.067 回答