0

次のようなファイルがあります。

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

、、および をそれぞれ-101およびに置き換えたいと思います。だから私は得るでしょう:2NA010101020202

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")ますgsub(/<1\>/,"0102")<次のように、あなたもエスケープする必要がgsub(/\<0\>/,"0101")あります。gsub(/\<1\>/,"0102")

于 2012-07-24T10:41:35.067 に答える