2 回答
TA贡献1906条经验 获得超2个赞
$ awk 'NR>1 && $NF {a[$1]+=$NF}
END {for(k in a) print k, a[k]}' file
lcl|LGDX01000053.1_cds_KOV95325.1_1 10
lcl|LGDX01000053.1_cds_KOV95324.1_1 101
lcl|LGDX01000053.1_cds_KOV95322.1_1 1
由于不匹配其他列无法确保它们都相同,因此以这种方式汇总数据将仅具有键和聚合数据。
解释
awk
为这个脚本查找基础语法
NR>1 && $NF
跳过标题 (NR==1) 和零最后字段
{a[$1]+=$NF}
按第一个字段总结最后一个字段作为键
END
最后
{for(k in a) print k, a[k]}
打印所有键值对
TA贡献1848条经验 获得超2个赞
vanilla python 中的一个简单方法就是读取文件,并根据硬编码格式逐行处理它:
sum_groups = 0
with open('groups_file.txt', 'w') as groups_file:
for line in open('large_text_file.txt', 'r'):
line_items = line.split(' ') # split into a list
if int(line_items[-1]) == 0: # ignore the line if last value is 0
continue
sum_groups += int(line_items[-2]) # add second-to-last column to sum
line_to_write = ' '.join(line_items[0:1] + line_items[2:]) + '\n'
groups_file.write(line_to_write) # write to file, after removing second column
Python 的文件处理不会一次读取整个文件(我们一次只读取一行,当我们读取下一行时,前一行会被垃圾收集),所以这不应该占用太多除非组本身太大。与写入文件类似,IIRC - 如果您需要,您可以简单地打开一个输出文件并直接从输入文件写入输出文件,而不是将结果附加到groups,从而节省更多内存。
当然,这比批处理整个文件要慢,但速度换空间一直是计算中的主要权衡。
添加回答
举报