Lire fichier txt ligne par ligne en bash
Résolu/Fermé
jhoncoke
Messages postés
35
Date d'inscription
jeudi 30 septembre 2010
Statut
Membre
Dernière intervention
4 octobre 2012
-
8 oct. 2010 à 10:37
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 8 oct. 2010 à 14:35
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 8 oct. 2010 à 14:35
A voir également:
- Lire un fichier ligne par ligne bash
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Aller à la ligne excel - Guide
- Lire fichier epub - Guide
- Fichier rar - Guide
- Site de vente en ligne particulier - Guide
4 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
8 oct. 2010 à 12:09
8 oct. 2010 à 12:09
hello
faut-il traiter le reste du fichier ou s'arrêter à la ligne 6 ?
faut-il traiter le reste du fichier ou s'arrêter à la ligne 6 ?
$ awk '{x[NR]=$0;y[NR]=$3};END{i=1;for(n=1;n<=NR;n++){if(n!=1 && !y[n] && y[n-1])for(;i<=n;i++) print x[i] > "a11" }}' fichier $ $ cat a11 0.000000 0.000000 0.000000 0.023367 0.000000 6.200000 0.003548 0.000000 6.300000 0.011333 0.000000 6.400000 0.005677 138.900000 3.100000 1.067020 138.800000 0.000000 $
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 oct. 2010 à 12:37
8 oct. 2010 à 12:37
Salut,
S'il ne faut traiter que les 1er cas rencontré, avec "sed" :
S'il y a d'autres cas similaires dans le fichier à traiter ça ne le fera pas, le seul souci est au niveau de la génération d'un fichier de sortie différent ;-(
S'il ne faut traiter que les 1er cas rencontré, avec "sed" :
$ cat plop 0.000000 0.000000 0.000000 0.023367 0.000000 6.200000 0.003548 0.000000 6.300000 0.011333 0.000000 6.400000 0.005677 138.900000 3.100000 1.067020 138.800000 0.000000 0.137370 0.000000 0.000000 0.007805 104.800000 10.300000 0.002838 104.400000 13.500000 0.011334 104.800000 14.500000 $ sed -n ':z;N;/ 0\.00*$/! bz; w toto' plop $ cat toto 0.000000 0.000000 0.000000 0.023367 0.000000 6.200000 0.003548 0.000000 6.300000 0.011333 0.000000 6.400000 0.005677 138.900000 3.100000 1.067020 138.800000 0.000000 $
S'il y a d'autres cas similaires dans le fichier à traiter ça ne le fera pas, le seul souci est au niveau de la génération d'un fichier de sortie différent ;-(
jhoncoke
Messages postés
35
Date d'inscription
jeudi 30 septembre 2010
Statut
Membre
Dernière intervention
4 octobre 2012
8 oct. 2010 à 13:40
8 oct. 2010 à 13:40
Il faut traiter tout le fichier... Et il existe beaucoup de cas similaires. Je m'attends à avoir entre 20 et 30 fichiers différents à la fin...
Maintenant je peux reposer le problème autrement:
Au lieu de mettre les données dans un nouveau fichier, je peux directement dessiner un diagramme avec un gnuplot... D'ailleur, le but final de toute l'opération est de tracer des diagrammes différents avec ces parties du fichier.
Maintenant je peux reposer le problème autrement:
Au lieu de mettre les données dans un nouveau fichier, je peux directement dessiner un diagramme avec un gnuplot... D'ailleur, le but final de toute l'opération est de tracer des diagrammes différents avec ces parties du fichier.
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
Modifié par dubcek le 8/10/2010 à 14:35
Modifié par dubcek le 8/10/2010 à 14:35
a tester sur plus de données
$ awk '{x[NR]=$0;y[NR]=$3};END{i=1;for(n=1;n<=NR;n++){if(n==1 || (n!=1 && y[n]) || (!y[n] && y[n-1])) print x[n] > "result" i; else i++}}' fichier $ more result* :::::::::::::: result1 :::::::::::::: 0.000000 0.000000 0.000000 0.023367 0.000000 6.200000 0.003548 0.000000 6.300000 0.011333 0.000000 6.400000 0.005677 138.900000 3.100000 1.067020 138.800000 0.000000 :::::::::::::: result2 :::::::::::::: 0.007805 104.800000 10.300000 0.002838 104.400000 13.500000 0.011334 104.800000 14.500000 $