我有一个像这样的csv文件(日期值只有7天,但不是静态的):
DATE,PATH,%
20.05.2015,RAM,0
20.05.2015,SWAP,00
20.05.2015, /, 000
20.05.2015, /dev, 0000
21.05.2015,RAM,1
21.05.2015,SWAP,11
21.05.2015, /, 111
21.05.2015, /dev, 1111
22.05.2015,RAM,2
22.05.2015,SWAP,22
22.05.2015, /, 222
22.05.2015, /dev, 2222
22.05.2015, /root, 22222
22.05.2015, /root2, 222222
23.05.2015, /root2, 333333
24.05.2015, /root2, 444444
25.05.2015, /root2, 555555
26.05.2015, /root2, 666666
我需要将行的日期值打印到这样的列:
PATH,20.05.2015,21.05.2015,22.05.2015,23.05.2015,24.05.2015,25.05.2015,26.05.2015
RAM,0,1,2,,,,
SWAP,00,11,22,,,,
/,000,111,222,,,,
/dev,0000,1111,2222,,,,
/root,,,22222,,,,
/root2,,,222222,333333,444444,555555,666666
对awk或其他方式的任何建议?
我尝试了关于这个主题的解决方案:
An efficient way to transpose a file in Bash
但这是一个不同的问题,我无法解决我的问题。
Excel视图以便于理解:
答案 0 :(得分:1)
X
答案 1 :(得分:1)
您希望输出不是输入的纯转置,也不清楚是否存在所需输出中字段数到空白字段的纯映射。 (我认为这是真的。)
如果这是正确的,这个Python程序可以做你想要的:
<html>
<body>
</body>
</html>
打印:
import csv
from collections import OrderedDict
data=OrderedDict()
with open(fn) as f:
reader=csv.reader(f, skipinitialspace=True)
header=next(reader)
data[header[1]]=[]
for line in reader:
if line[1] not in data:
data[line[1]]=[]
with open(fn) as f:
reader=csv.reader(f, skipinitialspace=True)
header=next(reader)
for line in reader:
data[header[1]].append(line[0])
data[line[1]].append(line[2])
for e in set(data.keys())-set([header[1],line[1]]):
data[e].append('')
for k, v in data.items():
print k, ','.join(v)