按列值合并多行到单行
我有一个用制表符分隔的文本文件,这个文件非常大。文件中的很多行在某一列的值是相同的。我想把这些相同的值放到同一行里。比如:
a foo
a bar
a foo2
b bar
c bar2
运行这个脚本后,它应该变成:
a foo;bar;foo2
b bar
c bar2
我该如何在shell脚本或Python中做到这一点呢?
谢谢。
6 个回答
1
在Python 2.7中进行了测试:
import csv
data = {}
reader = csv.DictReader(open('infile','r'),fieldnames=['key','value'],delimiter='\t')
for row in reader:
if row['key'] in data:
data[row['key']].append(row['value'])
else:
data[row['key']] = [row['value']]
writer = open('outfile','w')
for key in data:
writer.write(key + '\t' + ';'.join(data[key]) + '\n')
writer.close()
2
from collections import defaultdict
items = defaultdict(list)
for line in open('sourcefile'):
key, val = line.split('\t')
items[key].append(val)
result = open('result', 'w')
for k in sorted(items):
result.write('%s\t%s\n' % (k, ';'.join(items[k])))
result.close()
没有经过测试
3
你可以用awk来试试这个
{ a[$1] = a[$1] ";" $2 }
END { for (item in a ) print item, a[item] }
所以如果你把这个awk脚本保存为一个叫做awkf.awk的文件,而你的输入文件是ifile.txt,运行这个脚本的方法是
awk -f awkf.awk ifile.txt | sed 's/ ;/ /'
sed脚本是用来去掉开头的分号;
希望这对你有帮助