awkはいくつかの行を自動的にコピーします。誰かがこれを説明できますか?

awkはいくつかの行を自動的にコピーします。誰かがこれを説明できますか?

私のデータは次のとおりです。

A 4 G 1 G 1
C 4 C 2 C 2
T 6 T 5 T 5
A 6 T 2 T 2
C 6 T 2 T 2
T 6 G 2 G 2

私はコマンドを試しています:

awk -F " " '$1==$3 {$7=$6; print $0;}
            $1==$5 {$7=$4; print $0;}
            ($1 != $3 && $1 != $5) {$7=$2; print $0}' test.txt

データには5行しかありませんが、出力には7行があり、一部の行はランダムに繰り返されます。

どういうわけか、これはこのデータセットでのみ発生し、私が持っている他のデータセットでは発生しません。誰でも助けることができますか?何が起こったのか理解できません。

ベストアンサー1

目的の動作方法を正確に説明していないので、ここでいくつかの推測をしましょう。

重複した行を見てください。

C 4 C 2 C 2

$1 は $3 と同じなので、最初のブロックが実行されます。 $ 1は$ 5に等しいので、2番目のブロックがトリガーされます。

入力ラインごとに1つの出力ラインだけが必要な場合は、データを1つの場所にのみ出力します。

awk -F " " '$1==$3 {$7=$6;}
            ($1==$5) {$7=$4; }
            ($1 != $3 && $1 != $5) {$7=$2}
            ($7 != "") { print $0 }' test.txt

私はこれがあなたが探している動作だと思いますが、入力と同じかより少ない数の出力ラインを生成します。すべての入力ラインに対して1ラインの出力が必要な場合は、最後のブロックから条件を削除します。

おすすめ記事