2010-06-06 8 views
0

Je dois analyser un fichier ligne par ligne sur des règles données.analyse de fichier basée sur les règles

Voici une exigence.

fichier

peut avoir plusieurs lignes avec des données différentes ..

01200344545143554145556524341232131 
1120034454514355414555652434123213101200344545143554145556524341232131 
2120034454514 

et des règles peut être comme ça.

  • si l'octet [0,1] == "0", puis extraire cette ligne à /tmp/record0.dat
  • si l'octet [0,1] == "1", puis extraire cette ligne à/tmp/record1.dat
  • si l'octet [0,1] == « 2 » puis extraire cette ligne à /tmp/record2.dat

Je cherche une langue qui peut le faire dans un rapide manière avec une taille de fichier très longue comme> 2 Go.

Appréciez toute l'aide à l'avance.

Merci

+0

Personnellement, je le ferais dans le code. Je n'ai pas toutes vos règles mais je vois un modèle qui rendrait cela trivial. –

+0

Si toutes vos règles sont comme ça, je pense que vous devriez vous concentrer sur l'efficacité des E/S. –

+0

Votre fichier est-il binaire ou contient-il des données en texte brut? – Behrang

Répondre

3

Il ne figure pas dans votre liste de tags, mais j'utiliser:

sed -n -e '/^0/w /tmp/record0.dat' \ 
     -e '/^1/w /tmp/record1.dat' \ 
     -e '/^2/w /tmp/record2.dat' "[email protected]" 

Vous pouvez aussi le faire dans les autres langues, mais pour la concision et l'exactitude probable, dans ce cas, sed est difficile à battre.

+0

+1 Pour l'utilisation correcte probable du mot "probable" –

2

Cela fonctionne quelle que soit la valeur du premier caractère de sorte qu'il adapte sans avoir à ajouter d'autres règles:

awk '{c=substr($0,0,1); print $0 > "/tmp/record" c ".dat"}' inputfile.dat 
+0

+1 ... Est-ce que '{print> "/ tmp/record" substr ($ 0,0,1) ".dat"}' fonctionne? –

+0

@belisarius: oui, c'est le cas. –

0
awk -vFS= 'NF{print $0>"/tmp/record"$1".dat"}' file 
Questions connexes