2011-10-03 2 views
1

Récemment, je l'ai utilisé beaucoup de fichiers texte (csv) avec 10-60k lignes, quelque chose comme çaMeilleur (le plus rapide) pour analyser et ainsi modifier un fichier

id1,id2 
id3,id1 
id81,id13 
... 

Et la plupart du temps, j'ai besoin pour extraire cette informaton sous forme d'un tableau:

id1,id2,id3,id1,id81,id13 

Ou parfois, tableau d'éléments uniques:

id1,id2,id3,id81 

Puis le résu Il est utilisé par mon code (java) pour faire quelque chose.

Maintenant, la plupart du temps j'écris une fonction java qui fait la tâche pour moi, directement à partir de la lecture du fichier, de la logique, puis de retourner la liste des IDs.

Y a-t-il un moyen meilleur et plus rapide d'y parvenir, peut-être via une ligne de commande?

Mise à jour:

Si on m'a demandé de construire une application qui devait lire un fichier et faire quelque chose avec elle, je vais sûrement écrire cette logique en Java, mais dans mon cas je dois aller grâce à beaucoup de fichiers texte que je reçois de l'entrepôt de données, extraire des informations pertinentes de celui-ci, puis exécutez-le sur mon application basée sur Java.

Maintenant, ceci est seulement pour mon expérience et l'évaluation de mon application.

+1

De quoi avez-vous besoin pour consommer ce tableau? Pourquoi un utilitaire de ligne de commande serait-il meilleur? Il aurait toujours besoin de lire le fichier sur le disque, analyser le fichier et stocker le tableau en mémoire comme avec un bloc de code de ligne sans commande. –

+0

parce que je continue à faire ces petits tests très fréquemment, pas vraiment une partie d'une application. Mais faire des expériences sur les données. – zengr

Répondre

1

Je copiais votre entrée dans un fichier, test.csv:

$ cat test.csv 
id1,id2 
id3,id1 
id81,id13 

Maintenant, avec l'utilitaire 'tr', vous pouvez faire:

$ cat test.csv | tr '\n' ',' | tr -d ' ' 

et vous avez:

id1,id2,id3,id1,id81,id13 
+0

Et qu'en est-il de sed ou awk? Sont-ils destinés à ce cas d'utilisation? – zengr

+0

Oui, mais c'est un peu plus complexe, il semble: http://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n –

0

À moins que votre code Java ne fasse quelque chose de stupide, il sera dans la même vitesse que toute autre chose.

Il n'y a rien de magique dans les outils de ligne de commande qui les rendront plus rapides que votre code.

Questions connexes