では、$3
がSNV or MNV or INDEL
の場合、ヘッダー行とともに、行全体を印刷しようとしています。その条件が満たされているか、それは本当の、そして$4
にsub
パターン:GMAF=
が発見されたとした場合=記号の後に値がチェックされます。その値が.01以下の場合は、ヘッダー行とともに行全体が出力されます。awkがキーワードで一致し、別のフィールドのサブパターンを確認する
$3
が空白またはNULLにSNV
と$4
することは可能であるので、その後、私もこれをキャプチャする方法を確認していません。 2行目はこれの例です。 $4
に値がない場合、これはゼロと同じであるため、有意であり、抽出されると仮定します。私はまた、ヘッダー行から#
を差し引いたものをプリントにどのように含めるかについてはわかりません。 ---
はファイルの一部ではなく、ヘッダーを示すためのものです。私は各行にコメントを追加しました。ありがとうございました :)。
ファイルtab-delimited
##.....
##.....
#ID Name Func List ---- header row ----
1 1 REF
2 2 SNV
3 3 SNV AMAF=0.0041:EMAF=0.0:GMAF=0.0014
所望の出力tab-delimited
ID Name Func List
2 2 SNV
3 3 SNV AMAF=0.0041:EMAF=0.0:GMAF=0.0014
AWK
awk -F'\t' -v OFS='\t' 'NR>3 # define FS and OFS as tab and look in 3 row of file
$3 == "SNV"|| $3 == "MNV"|| $3 == "INDEL"{ # start block and look in row 3 in`$2` for any of these words
sub(/:GMAF=*/,"",$4); # if found then search `$4` for `:GMAF=`
VAL=substr($4,RSTART+4,RLENGTH-4); 3 extract the 4 digits after the = sign as VAL
} # close block
for(i=1;i<=num;i++){ # create a loop to iterate over each line as i
if(VAL[i] <= 0.01){ 3 check each VAL in iand if less then or equal to 0.01
{ # start block
print $1, $2, $3, VAL; # print output
} # end block
next # process next line
} # end block
1' file
ただ理解しやすいように、上記のコードをフォーマットするエド・モートンが210
編集:
awk -F'\t' -v OFS='\t' ' # define FS and OFS as tab
NR>3 # and look in 3 row of file
$3 == "SNV" || $3 == "MNV" || $3 == "INDEL" { # start block and look in row 3 in`$2` for any of these words
sub(/:GMAF=*/,"",$4); # if found then search `$4` for `:GMAF=`
VAL=substr($4,RSTART+4,RLENGTH-4); 3 extract the 4 digits after the = sign as VAL
} # close block
for(i=1;i<=num;i++) { # create a loop to iterate over each line as i
if(VAL[i] <= 0.01) { 3 check each VAL in iand if less then or equal to 0.01
{ # start block
print $1, $2, $3, VAL; # print output
} # end block
next # process next line
} # end block
1' file
コードの流れを見ることがはるかに簡単ですので、私はあなたのスクリプトで空白とインデントを変更しました。これで、すべての構文と意味エラー(中かっこ、余分な中かっこ、コメント開始文字がないなど)を簡単に確認できるようになりました。問題を解決した後に戻ってきます。インデントと空白はソフトウェアでは非常に重要です。フォローするのに適した標準を見つけ、それを実行してください。ああ、組み込み変数との衝突を避けるために、すべての大文字の変数名を使用しないでください。 –