私のデータは次のとおりです。
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ラインの出力が必要な場合は、最後のブロックから条件を削除します。