次のファイルがあります。
ID101 G T freq=.5 nonetype ANC=.1 addinfor
ID102 A T freq=.3 ANC=.01 addinfor
ID102 A T freq=.01 type=1 ALT=0.022 ANC=.02 addinfor
ご覧のとおり、各行にはわずかに異なる列数があります。特に、列1、列2、列3、列4以上が必要です。ANC=
希望の出力:
ID101 G T freq=.5 ANC=.1
ID102 A T freq=.3 ANC=.01
ID102 A T freq=.01 ANC=.02
私は通常、awkコマンドを使用してファイルを解析します。
awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'
この状況に合わせてこのコマンドを変更する簡単な方法はありますか?
私の考えには次のようなものが効果があるようです。
awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'
しかし、最初の列を印刷するにはどうすれば編集できますか?
ベストアンサー1
そしてawk
:
awk '{for(i=5;i<=NF;i++){if($i~/^ANC=/){a=$i}} print $1,$2,$3,$4,a}' file
for(...)
i=5
フィールド5()から始めて、すべてのフィールドを繰り返します。if($i~/^ANC=/)
フィールドが次から始まることを確認してください。ANC=
a=$i
その場合は、変数aをその値に設定します。
print $1,$2,$3,$4,a
フィールド1-4を印刷してから、保存した内容を印刷しますa
。
BEGIN {OFS="\t"}
もちろん結合も可能です。