Salut à tous,
J'ai un script bash grace auquel je lis un fichier.
Dans ce fichier, il y a plusieurs lignes qui contiennent des champs et des valeurs comme suit :Je souhaite remettre en forme ces valeurs de la forme suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 couleur=rouge; objet=maison; nom=plop; prenom=pasplop; adresse=0xFF2245; date=today couleur=bleu; objet=bateau; nom=gloup; prenom=pasgloup; adresse=0xFF2250; date=hierDans un fichier portant le nom+".txt", puis idem pour chaque ligne du fichier de base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6ligne_de_valeurs couleur rouge ligne_de_valeurs objet maison ligne_de_valeurs nom plop ligne_de_valeurs prenom pasplop ligne_de_valeurs adresse 0xFF2245 ligne_de_valeurs date today
J'ai créé un script qui fonctionne très bien, mais je pense qu'il peut etre GRANDEMENT optimisé. En effet je pense que je me suis galéré un peu, mais mes faibles connaissances dans la programmation unix, ne m'ont pas laissé le choix.
Voici mon script tel qu'il est à l'heure actuelle :Je pense que ce code va faire bondir certains
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #!/bin/bash fichier=/home/Moi/Desktop/myfile.txt rep_dest=dest/ rep_courant=$(pwd) while read ligne do i=1 echo > $rep_dest"fichier_temp" while [ "$(echo $ligne | cut -d";" -f$i)" ] do champ=$(echo $ligne | cut -d" " -f$i | cut -d"=" -f1) #On copie le champ valeur=$(echo $ligne | cut -d" " -f$i | cut -d"=" -f2 | cut -d";" -f1) #On copie la valeur associé au champ if [ "$champ" = "nom" ] then nom_fichier="$valeur.txt" fi echo -e "ligne_de_valeurs\t$champ\t$valeur" >> $rep_dest"fichier_temp" ((i++)) done if [ ! -f "$rep_dest$nom_fichier" ] then echo -e "Arrivée d'un nouveau nom > $rep_courant/$rep_dest$nom_fichier" fi done < $fichierSi vous pouviez m'aider dans son optimisation, je vous en saurait gré
![]()
Partager