ゼロ以外のすべての結果を「1」に置き換えて、存在/不在を形成します。

ゼロ以外のすべての結果を「1」に置き換えて、存在/不在を形成します。

タブで区切られたテーブルがあります。

  a b c
A 5 2 0
B 0 5 4
C 4 3 4
D 2 0 2

列名や行名を変更せずにゼロ以外の値を「1」に変更したいと思います。

希望の出力:

  a b c
A 1 1 0
B 0 1 1
C 1 1 1
D 1 0 1

これを明確にするために、以下はサンプルテーブルです。この文字は列/行名を表す変数です。何百もの列と行があるかもしれません。ゼロ以外の値(ここでは数字で指定)は必ずしも数字である必要はありません。たとえば、人の名前です。

ベストアンサー1

厳密にタブ区切りの入力を想定すると、次のようになります。

$ cat data.in
        a       b       c
A       nancy   bilbo baggins   0
B       0       darcy   bender
C       phantom menace  Unix    !!
D       last row        0       the end

$ cat -t data.in
^Ia^Ib^Ic
A^Inancy^Ibilbo baggins^I0
B^I0^Idarcy^Ibender
C^Iphantom menace^IUnix^I!!
D^Ilast row^I0^Ithe end

awkタスクを実行するスクリプト:

BEGIN { OFS = FS = "\t" }

NR != 1 {
    for (i = 2; i <= NF; ++i) {
        if ($i != "0") {
            $i = "1";
        }
    }
}

{ print }

実行してください:

$ awk -f script.awk data.in
        a       b       c
A       1       1       0
B       0       1       1
C       1       1       1
D       1       0       1

スクリプトは、0各フィールド(列)を単一文字(最初のフィールドを除く)と比較してとして0出力します1。出力はタブで区切られます。

おすすめ記事