複数の列を含むファイルがあります。このファイルの2つの列の値に基づいて追加の列を作成したいと思います。
入力例:
A B C D E F
1 2 T TACA A 3 2
3 4 I R 8 2
9 3 A C 9 3
- 3列と4列(CとDで表される)の値が文字A、C、G、またはTの場合、7列はPでなければなりません。
- 3列と4列の文字がI、D、Rの場合、7列はQでなければなりません。
- 3列または4列に複数の文字がある場合、7列はQでなければなりません。
希望の出力:
A B C D E F G
1 2 T TACA A 3 2 Q
3 4 I R 8 2 Q
9 3 A C 9 3 P
列3の値の一部を「1」に置き換える以外は、次のコードがあります。列1〜6を変更せずに維持したいです。
awk '{if ((($3!="A" && $3!="C" && $3!="G" && $3!="T") || ($3="I" || $3="D" || $3="R")) || (($4!="A" && $4!="C" && $4!="G" && $4!="T") || ($4="I" || $4="D" || $4="R"))) { $7 = "INDEL" } else { $7 = "SNP" }}1' filename > newfilename
答え1
これは以下に適用されますmawk
。
awk 'NR==1{$7="G";print;next} \
$3~/^[A,C,G,T]$/ || $4~/^[A,C,G,T]$/ {$7="P"} \
$3~/^[I,D,R]$/ || $4~/^[I,D,R]$/ {$7="Q"} \
$4~/[A-Z][A-Z]/ || $3~/[A-Z][A-Z]/ {$7="Q"} 1' file
- 行:最初の行にタイトルを書きます
G
。 - 行:
$3
A$4
、C、G、またはTの場合は$7
YesですP
。 - 行:
$3
I$4
、D、またはRの場合は$7
YesですQ
。 - 行:複数の文字
$3
の場合は例です。最後に、すべての行を印刷します。$4
$7
Q
1
答え2
このコードは説明を必要とせず、理解しやすいです。要件に応じて、最後のelse条件を変更または無視できます。 「input_file.txt」という入力ファイルがあり、「XXXX.awk」という別のファイルにawkプログラムを生成するとします。それでは、コマンドラインを使って実行してみてください。
awk -f XXXX.awk 入力ファイル.txt
BEGIN {
FS=" ";
}
{
if(NR==1) print $0" G";
else if(length($4)>1 || length($3)>1) print $0" Q";
else if($3 ~ /[I,D,R]/ && $4 ~ /[I,D,R]/) print $0" Q";
else if($3 ~ /[A,C,G,T]/ && $4 ~ /[A,C,G,T]/) print $0" P";
else print $0" NA";
}