【发布时间】:2014-08-07 01:56:51
【问题描述】:
我正在尝试删除 APPID 相同且“类别”列属于同一类别的逗号分隔文件中的行。输入:
1,APPID,ID2,ID3,5,6,7,8,9,Category,
5002 , APP-1 ,,,,,,,, Cell ,
5002 , APP-1 ,,,,,,,, Cell ,
5002 , APP-2 ,,,,,,,, Cell ,
5002 , APP-2 ,,,,,,,, Enzyme ,
5002 , APP-3 ,,,,,,,, Cell ,
5002 , APP-3 ,,,,,,,, Biochemical ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Cell ,
理想输出:
1,APPID,3,4,5,6,7,8,9,Category ,
5002 , APP-2 ,,,,,,,, Cell ,
5002 , APP-2 ,,,,,,,, Enzyme ,
5002 , APP-3 ,,,,,,,, Cell ,
5002 , APP-3 ,,,,,,,, Biochemical ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Cell ,
“APP-1”被删除,因为它们的第 2 列是相同的,并且它们的类别列都是“单元格”。
保留“APP-2”是因为它们的“类别”列中有一个“细胞”,另一个是“生化”。
“APP-3”中的类似场景,其“类别”列包含异构类别。
(更新)保留“APP-4”是因为它们的列包含异构类别。我们希望保留“5002,APP-4 ......”的重复,这将在下一个脚本中处理。这一步是快速删除“Category”列(如果它们的APPID相同)中同质的数万个数据点,这样下一个脚本中的数组就不会爆炸。
到目前为止的尝试似乎没有奏效(来自这里的参考:removal of redundant lines based on value in last column)
awk -F " ," '!a[$1,$2,$3,$4,$5,$6,$7,$8,$9]++' input
每个文件的处理文件大约有百万行,总共需要处理大约 400 个文件。执行速度在这里似乎至关重要。有哪位大师能开导吗?谢谢!
【问题讨论】:
-
一个APP-ID和一个类别重复3次怎么办?如果出现 3 次相同的 APP-ID,而其中只有两个属于同一类别,会发生什么情况?