[linux/shell] inserrer texte en début ligne
Résolu
mortelrdv
-
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
Bonjour,
J'ai un fichier CSV de ~70 000 lignes, je souhaiterai inserrer le texte "moco;" en début de ligne.
J'ai fait ceci qui fonctionne :
ça prend environ 3mn chez moi, core2duo 6600, pour le faire. mais comme le script va servir au boulot sur un sunOS très lent. (j'avais fait il y a longtemps un autre script pour traiter ces 70 000 lignes pour faire autre chose, find de traitement en 8mn chez moi et 1h20 sur le sunOS. Disque lent ou processeur lent, aucune idée).
Je ne pense pas que je suis pressé mais je me demande s'il n'existerait pas une méthode plus efficace/optimisée pour diminuer le temps de traitement.
Merci pour tout suggestion
J'ai un fichier CSV de ~70 000 lignes, je souhaiterai inserrer le texte "moco;" en début de ligne.
J'ai fait ceci qui fonctionne :
while read line; do echo "VCC;"$line >>$_OUT done < $_FILE_TMP1
ça prend environ 3mn chez moi, core2duo 6600, pour le faire. mais comme le script va servir au boulot sur un sunOS très lent. (j'avais fait il y a longtemps un autre script pour traiter ces 70 000 lignes pour faire autre chose, find de traitement en 8mn chez moi et 1h20 sur le sunOS. Disque lent ou processeur lent, aucune idée).
Je ne pense pas que je suis pressé mais je me demande s'il n'existerait pas une méthode plus efficace/optimisée pour diminuer le temps de traitement.
Merci pour tout suggestion
A voir également:
- [linux/shell] inserrer texte en début ligne
- Partager photos en ligne - Guide
- Classic shell - Télécharger - Personnalisation
- Mètre en ligne - Guide
- Transcription audio en texte word gratuit - Guide
- Formulaire en ligne de meta - Guide
8 réponses
Salut,
L'algo est aussi important et il joue sur le temps d'exécution.
Ton cas
Tu lis chaque ligne et tu la stockes
Tu concatenes VCC avec le contenu de la variable
Tu fait la redirection >> vers le nouveau fichier
La solution de dubcek
Il mets au début de chaque ligne VCC
Le résultat il le mets dans le fichier de sortie
Un fichier de 70000 ligne ce n'est rien ;-))
Voici un test de temps pour un fichier d'un 1 000 000 lignes
L'algo est aussi important et il joue sur le temps d'exécution.
Ton cas
Tu lis chaque ligne et tu la stockes
Tu concatenes VCC avec le contenu de la variable
Tu fait la redirection >> vers le nouveau fichier
La solution de dubcek
Il mets au début de chaque ligne VCC
Le résultat il le mets dans le fichier de sortie
Un fichier de 70000 ligne ce n'est rien ;-))
Voici un test de temps pour un fichier d'un 1 000 000 lignes
lami20j@debian:~/sda7$ cat /proc/cpuinfo|tail -30|head -8 clflush size : 64 power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Core(TM)2 Duo CPU T5450 @ 1.66GHz lami20j@debian:~/sda7$ du -sh mortelrdv 112M mortelrdv lami20j@debian:~/sda7$ wc -l mortelrdv 1000000 mortelrdv lami20j@debian:~/sda7$ time while read line;do echo "VCC;"$line >> mortelrdv.OUT; done < mortelrdv real 0m58.677s user 0m44.995s sys 0m13.681s lami20j@debian:~/sda7$ time sed 's/^/VCC;/' <mortelrdv>mortelrdv.OUT2 real 0m1.624s user 0m1.108s sys 0m0.464s
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
lami20j@debian:~/sda7$ time awk '{printf("VCC;%s\n", $0)}' <mortelrdv>mortelrdv.OUT3
real 0m1.630s
user 0m0.808s
sys 0m0.548s
Merci pour vos suggestion.
Je vais passer par awk car je voudrais ajouter quelques operations.
PS : Maintenant que j'y pense, dans le script qui a duré 1h sur un sunOs, je me demande s'il l'accès disque n'y serait pas pour quelque chose car je fais quelque chose comme 70000x(ecriture puis effacement, d'un petit fichier de 2ko)
Je vais passer par awk car je voudrais ajouter quelques operations.
PS : Maintenant que j'y pense, dans le script qui a duré 1h sur un sunOs, je me demande s'il l'accès disque n'y serait pas pour quelque chose car je fais quelque chose comme 70000x(ecriture puis effacement, d'un petit fichier de 2ko)