【发布时间】:2013-08-19 03:40:36
【问题描述】:
我正在尝试解析具有标题部分(130 行,单列)的大型 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”为例,条件是:如果高亮的两个数字(3,0)相加到 >=20 并且第二个数字 (0) 大于或等于 10,然后将其打印到新的 CSV。如果不通过条件,只需打印“./.”在新的 CSV 中。具有“./.”的单元格已经将保持“./.”在新的 CSV 中。
我已在此线程use awk to process a csv (tab delimited) line by line 中提出了部分问题,感谢 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
}
}
【问题讨论】: