#1 Le 02/04/2017, à 20:12
- Compte supprimé
[Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
Bonjour,
Voici une question concernant un script bash.
J'ai un fichier texte qui ressemble à ça (pour l'exemple)
1000 toto titi
tata
1000 toto
titi
tata
1000 toto
titi tata
et j'aimerais avoir ça comme résultat:
1000 toto titi tata
1000 toto titi tata
1000 toto titi tata
En gros chaque fois que l'on rencontre "1000" cela provoque un retour à la ligne.
Merci
Dernière modification par Compte supprimé (Le 02/04/2017, à 20:46)
#2 Le 02/04/2017, à 20:44
- Compte supprimé
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
J'ai trouvé une solution en continuant mes recherches sur internet.
Voici une solution avec awk:
awk '$1=$1' ORS="\n1000 " RS="1000" "fichier.txt"
Dernière modification par Compte supprimé (Le 02/04/2017, à 20:50)
#3 Le 02/04/2017, à 20:52
- Watael
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
salut,
En gros chaque fois que l'on rencontre "1000" cela provoque un retour à la ligne.
plus précisément :
en début de ligne 1000 déclenche la lecture de la ligne suivante jusqu'au prochain 1000 en début de ligne.
l'espace en plus, à la ligne 3, c'est une typo, ou il faut en corriger le format aussi ?
edit :
$ output
1000 toto titi
tata
1000 toto
titi
tata
1000 toto
titi tata
$ output | awk '$1=$1' ORS="\n1000 " RS="1000"
toto titi tata
1000 toto titi tata
1000 toto titi tata
1000
?
et je croyais avoir lu que tu voulais faire ça en bash.
là, c'est du awk.
Dernière modification par Watael (Le 02/04/2017, à 20:55)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 02/04/2017, à 22:41
- Compte supprimé
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
Salut Watael,
Merci pour tes explications !
et je croyais avoir lu que tu voulais faire ça en bash.
là, c'est du awk.
Oui, sauf erreur de ma part on peut utiliser des commandes awk dans du bash, non ?
#5 Le 03/04/2017, à 02:03
- Watael
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
oui, bien sûr, mais s'il n'y a pas de bash, ce n'est pas du bash !
quand je lis "script bash", je pense immédiatement "100% full bash".
sinon (je ne sais pas trop), c'est du shell. (?)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 03/04/2017, à 19:19
- Compte supprimé
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
Bien que j'ai trouvé une solution à mon problème initiale qui fonctionne dans mon script bash (vu que j’utilise au tout début #! /bin/bash, je pense que c'est du bash ) quelle serai donc la solution si je voudrais le faire en "100% full bash" ?
EDIT:
Dans mon script qui à pour but de convertir des fichiers vidéo et audio, j'utilise awk pour la recherche d'info sur les fichiers, ffmpeg pour la conversion et yad pour l'interface graphique... et là je pense que je ne dois pour faire vraiment du bash.
Après quand je lis cette page: Programmation Bash/Commandes shell, je trouve la bien la commande awk, pour être franc je n'y comprends plus rien !
Dernière modification par Compte supprimé (Le 03/04/2017, à 19:40)
#7 Le 03/04/2017, à 20:52
- MicP
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
Bonsoir
… Bash… J'ai un fichier texte …En gros chaque fois que l'on rencontre "1000" cela provoque un retour à la ligne. …
michel@debg53sw:~$ cat fichierTexte
1000 toto titi
tata
1000 toto
titi
tata
1000 toto
titi tata
michel@debg53sw:~$
michel@debg53sw:~$ for mot in $(<fichierTexte); do [ $mot = 1000 ] && printf '\n%s ' $mot || printf '%s ' $mot; done; printf '\n'
1000 toto titi tata
1000 toto titi tata
1000 toto titi tata
michel@debg53sw:~$
Le dernier printf '\n' c'est juste pour que mon prompt soit en début de ligne,
tu pourra l'enlever si besoin.
Dernière modification par MicP (Le 03/04/2017, à 21:37)
Hors ligne
#8 Le 03/04/2017, à 21:42
- Compte supprimé
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
Salut MicP
Un grand merci pour ta solution !
#9 Le 03/04/2017, à 22:40
- Watael
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
ah, oui, c'est malin !
+1
ajoute un petit test pour te débarrasser de la première ligne vide.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 04/04/2017, à 07:59
- Hizoka
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
pas mal icP, j'aurais pas pensé aux print, je me serais compliqué la tache à utiliser des variables temporaires.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#11 Le 06/04/2017, à 10:56
- MicP
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
michel@debg53sw:~$ PasPremierMot=0; for mot in $(<fichierTexte); do [ $PasPremierMot = 1 ] && [ $mot = 1000 ] && printf '\n%s ' $mot || printf '%s ' $mot; PasPremierMot=1; done; printf '\n'
1000 toto titi tata
1000 toto titi tata
1000 toto titi tata
michel@debg53sw:~$
Hors ligne
#12 Le 06/04/2017, à 14:33
- Watael
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
et s'il y a un 1000 dans une phrase, mais pas au début, qui ne devrait donc pas être significatif ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 06/04/2017, à 14:50
- MicP
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
Je ne suis pas sûr d'avoir bien compris, mais j'ai testé avec ce texte en entrée,
dans lequel j'ai ajouté la dernière ligne :
michel@debg53sw:~$ cat fichierTexte
1000 toto titi
tata
1000 toto
titi
tata
1000 toto
titi tata
tata titi 1000 toto tata
michel@debg53sw:~$
michel@debg53sw:~$ PasPremierMot=0; for mot in $(<fichierTexte); do [ $PasPremierMot = 1 ] && [ $mot = 1000 ] && printf '\n%s ' $mot || printf '%s ' $mot; PasPremierMot=1; done; printf '\n'
1000 toto titi tata
1000 toto titi tata
1000 toto titi tata tata titi
1000 toto tata
michel@debg53sw:~$
Mais j'ai peut-être mal compris,
si c'est le cas, pourrais-tu donner un exemple de texte en entrée et le texte résultant qui devrait être sortis.
Hors ligne
#14 Le 06/04/2017, à 15:30
- Watael
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
oui, c'est ça.
le dernier 1000 n'étant pas en début de ligne ne devrait pas provoquer d'alinéa.
mais c'est à Slyfox de préciser le fonctionnement du script.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#15 Le 06/04/2017, à 15:35
- MicP
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
…c'est à Slyfox de préciser le fonctionnement du script.…
C'est vrai qu'avec une seule phrase courte, c'est difficile de ne pas se retrouver avec plusieurs interprétations possibles.
Et d'un autre côté, j'ai toujours plaisir à en apprendre un peu plus.
Hors ligne
#16 Le 06/04/2017, à 15:55
- Hizoka
Re : [Résolu] Bash - Fusionner ligne fichier texte jusqu'à un mot clé.
Et merci de nous permettre de lire ça aussi
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne