ヘッダー セクション (130 行、1 列) を持つ大きな CSV (約 90 MB) を解析しようとしています。行 131 は、個々の列 (合計 20 列) の名前を持つ列ヘッダーです。
最初の 9 列を解析する必要はありません。列 #10 から列 #20 までのデータは次の形式です (見やすくするために列として再フォーマットされていますが、下の各行は実際には CSV の個々の列にあります)。
0/0: 3,0 :9:0,9,90
./.
0/1: 6,3 :49:73,0,111
0/1: 13,3 :99:103,0,254
0/1: 6,6 :45:56,3,124
0/1: 2,2 :34:43,0,51
0/1: 80,0 :87:252,5,1882
0/1: 25,12 :99:139,286,3281
./.
0/1: 6,8 :64:64,0,130
0/1: 4,5 :65:109,0,114
この「0/0: 3,0 :9:0,9,90」を例にとると、基準は次のとおりです。強調表示されている 2 つの数字 (3,0) の合計が >=20 で、2 番目の数字 (0 ) が 10 以上の場合、それを新しい CSV に出力します。基準を満たさない場合は、「./.」を出力するだけです。新しいCSVで。「./.」を含むセル すでに「./.」のままです。新しいCSVで。
このスレッドでawk を使用して csv (タブ区切り) を 1 行ずつ処理する質問の一部を行いました。Kentのおかげで、条件を単一のセルに適用する方法がわかりましたが、10 をループする必要があります。列と同じ基準を適用します。以下は私が思いついたものですが、明らかに、これを完成させるにはもっと助けが必要です. ヘルプ/提案をいただければ幸いです。
BEGIN {
-F'\t'; -v OFS='\t'
for (i=10; i<=20; i++)
{
t=$i;
split(t,a,/[:,]/)}(a[2]+a[3])>=20 && a[3]>=10
}
}