2010-07-21 15 views
1

我有这样的文件。对于如:如何在文本文件中打印列以便使用unix命令进行明智排序?

number,dac,amountdac,expdate,0 
1111,1,0.000000,2010-07-21,0 
1111,2,0.000000,2010-07-21,0 
1111,3,0.000000,2010-07-21,0 
1111,4,0.000000,2010-07-21,0 
1111,5,0.000000,2010-07-21,0 
1111,6,0.000000,2010-07-21,0 
1111,7,0.000000,2010-07-21,0 
1111,8,0.000000,2010-07-21,0 
1111,9,0.000000,2010-07-21,0 
1111,10,0.000000,2010-07-21,0 
2222,1,50.000000,2010-07-21,0 
2222,2,0.000000,2010-07-21,0 
2222,3,0.000000,2010-07-21,0 
2222,4,0.000000,2010-07-21,0 
2222,5,0.000000,2010-07-21,0 
2222,6,0.000000,2010-07-21,0 
2222,7,0.000000,2010-07-21,0 
2222,8,10.000000,2010-07-21,0 
2222,9,0.000000,2010-07-21,0 
2222,10,0.000000,2010-07-21,0 
3333,1,0.000000,2010-07-21,0 
3333,2,0.000000,2010-07-21,0 
3333,3,0.000000,2010-07-21,0 
3333,4,0.000000,2010-07-21,0 
3333,5,0.000000,2010-07-21,0 
3333,6,0.000000,2010-07-21,0 
3333,7,0.000000,2010-07-21,0 
3333,8,0.000000,2010-07-21,0 
3333,9,200.000000,2010-07-21,0 
3333,10,50.000000,2010-07-21,0 

我想这样的输出,列数1同样是对所有DAC1到dac10。标题我给你参考。在原始文件中我没有标题。

number,dac1,dac2,dac3,dac4,dac5,dac6,dac7,dac8,dac9,dac10,amountdac1,amountdac2,amountdac3,,amountdac4,amountdac5,amountdac6,amountdac7,amountdac8,amountdac9,,amountdac10,expdate1,expdate2,expdate3,expdate4,expdate5,expdate6,expdate7,expdate8,expdate9,expdate10,0 
1111,1,2,3,4,5,6,7,8,9,10,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,0 
2222,1,2,3,4,5,6,7,8,9,10,50.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,10.000000,0.000000,0.000000,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,0 
3333,1,2,3,4,5,6,7,8,9,10,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,200.000000,50.000000,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,0 

回答

0

你可以写一个Python脚本打破了:

numbers = [] 
dacs = [] 
amountdacs = [] 
expdates = [] 
for row in text: 
    number, dac, amountdac, expdate, zero = row.split(',') 
    numbers.append(number) 
    dacs.append(dac) 
    amountdacs.append(amountdac) 
    expdates.append(expdate) 
# print things out however you want them 

你也许可以做到在Perl类似的东西,如果你更容易与它比我。

+0

对不起,我不知道python,我在Perl中有一些知识。但我不知道如何在unix中解决这个问题。感谢您的建议 – gyrous 2010-07-21 12:32:07

0

基本上这个想法是我想你需要转置的数据。 stackoverflow has a similar question with a very good solution

唯一的任务左边是u需要使用你的脚本技能

  • 取数据,即的块,10行 一次。
  • 移除第一柱在10个 行和转置数据
  • 添加的第一列(这里1111 或2222或3333)值

所有上述3个步骤应被递归地进行所有输入文件中的行。

我想提供了一半的解决方案,您可以用简单的脚本来管理剩下的部分。

2
awk -F"," '{ 
    a[$1]; 
    b[$1]=b[$1]","$2 
    c[$1]=c[$1]","$3 
    d[$1]=d[$1]","$4 
    e[$1]=e[$1]","$5 } 
END{ for(i in a){ print i,b[i],c[i],d[i],e[i] } } ' file 
+0

Ghostdog它的效果很好。非常感谢.. – gyrous 2010-07-21 13:58:03

+0

Ghostdog,我有一个问题。实际上,您提供的脚本在文件中的行数较少时工作正常。但是我有一个拥有近2千万行的文件。它花费了太多时间。你能帮我缓解这个问题吗? – gyrous 2010-07-26 09:05:45

相关问题