2010-07-21 2 views
1

Je fichier comme ça .. pour exemple:comment puis-je imprimer la colonne dans un fichier texte à la ligne sage en utilisant la commande 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 

je veux sortie comme celui-ci, colonne numéro 1 est la même pour tous DAC1 à dac10. en-tête j'ai donné pour votre référence. dans le fichier original, je n'ai pas d'en-tête.

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 

Répondre

0

Vous pouvez écrire un script python pour briser ce jusqu'à:

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 

Vous pourriez probablement faire quelque chose de similaire en Perl, si vous êtes plus facile avec elle que je suis.

+0

désolé je ne sais pas python, j'ai quelques connaissances en perl. mais je ne sais pas comment le casser en unix. merci pour votre suggestion – gyrous

0

Fondamentalement, l'idée est que je suppose que vous devez transposer les données. stackoverflow has a similar question with a very good solution

seule tâche gauche est u besoin d'utiliser vos compétences de script pour

  • prendre le bloc de données à savoir, 10 lignes à la fois.
  • supprimer la première colonne de ce que 10 rangées et transposer les données
  • ajouter la première valeur de la colonne (ici 1111 ou 2222 ou 3333)

tous les 3 étapes ci-dessus doivent être effectués de manière récursive à tous les lignes dans le fichier d'entrée.

Je suppose que la moitié de la solution est fournie et vous pouvez gérer le reste ici avec un script simple.

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 cela fonctionne très bien. merci beaucoup .. – gyrous

+0

Ghostdog, j'ai un problème. En fait, le script que vous avez donné fonctionne correctement pour moins de lignes dans le fichier. Mais j'ai un fichier qui a près de 2 lignes de crore. ça prend trop de temps. pouvez-vous m'aider à sloce ce problème – gyrous

Questions connexes