行列形式の数値を持つファイルがあります。ヘッダーを出力し、列の値が5未満で0より大きい場合は、列 'sum'に1を追加するawkスクリプトを作成しました。最後に、各列の合計を出力します。この部分は正常に機能します。
awk '
BEGIN {FS=OFS=" "}
NR==1 {print}
NR>1 {for (i=1;i<=NF;i++) if ($i < 5 && $i > 0) a[i]+=1}
END {for (i=1;i<=NF;i++) printf $a[i]
}' snp_fake2.txt > tmp.txt`
私の目標は、列の合計が値THRESHOLDより大きい場合に、列全体を印刷することです。2番目のforループの後にifステートメントを追加して、列の合計a [i]が> THRESHOLDであるかどうかを判別し、列を出力しようとしました。
awk '
BEGIN {FS=OFS=" "}
NR==1 {print}
NR>1 {for (i=1;i<=NF;i++) if ($i < 5 && $i > 0) a[i]+=1}
END {for (i=1;i<=NF;i++) if (a[i] < THRESHOLD) printf $i
}' snp_fake2.txt > tmp.txt`
しかし、これを実行すると、スクリプトは列全体を出力せず、単一の数値のみを出力します。単一の値だけでなく、列全体を印刷するにはどうすればよいですか?
AWKはファイルを一度に1行ずつ処理します。前の行のメモリはありません。ENDルールは、最後の行が処理された後に実行されます。この時点で、AWKは列$ iの単一の値(最後の行からの値)しか認識していないため、列$ iのすべてのエントリを出力できません。
目標には、ファイルの2つのパスが必要です。1つは列の合計を計算するためのもので、もう1つは列全体を(適切な列に対して)印刷するためのものです。これを行うには、awkを呼び出して合計を計算し、次にawk(または他の何か)を呼び出して列を出力するシェルスクリプトを作成します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加