Bash:Traitement des colonnes d'un fichier
Résolu
poiuytreza01234567890
Messages postés
57
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Voilà, J'ai un fichier de ce type:
P1 8 12
P2 11 14
P3 9 11
P4 10 10
P5 8 10
P6 10 15
P7 14 12
P8 6 20
P9 4 24
NB: Les colonnes sont séparées par un espace.
Mon objectif est de récupérer le maximum de la troisième colonne et le stocker dans une variable, ensuite supprimer toutes les lignes, ayant comme valeur de la deuxième colonne, une valeur supérieure à ma variable stocker au départ et enfin écrire le résultat dans un fichier de sortie ne contenant que les lignes qui respectent la condition.
Voici Mon Script qui marche à moitié la deuxième partie ca me donne une erreur lors de l'exécution sur le terminale.
dirFichierInitiale=/home/Sukrat/Test/test.txt;
dirRes=/home/Sukrat/Test/NewTab.txt;
MinDistMax= cut -d" " -f3 $dirFichierInitiale | sort -n | sed '1,${1b;d}'
NewTabl= awk '$2 > MinDistMax {print $1 " " $2 " " $3}'
echo $NewTabl > $dirRes
Vous pensez, où est l'erreur? comment dois-je procédais?
Merci par avance pour votre aide !
Voilà, J'ai un fichier de ce type:
P1 8 12
P2 11 14
P3 9 11
P4 10 10
P5 8 10
P6 10 15
P7 14 12
P8 6 20
P9 4 24
NB: Les colonnes sont séparées par un espace.
Mon objectif est de récupérer le maximum de la troisième colonne et le stocker dans une variable, ensuite supprimer toutes les lignes, ayant comme valeur de la deuxième colonne, une valeur supérieure à ma variable stocker au départ et enfin écrire le résultat dans un fichier de sortie ne contenant que les lignes qui respectent la condition.
Voici Mon Script qui marche à moitié la deuxième partie ca me donne une erreur lors de l'exécution sur le terminale.
dirFichierInitiale=/home/Sukrat/Test/test.txt;
dirRes=/home/Sukrat/Test/NewTab.txt;
MinDistMax= cut -d" " -f3 $dirFichierInitiale | sort -n | sed '1,${1b;d}'
NewTabl= awk '$2 > MinDistMax {print $1 " " $2 " " $3}'
echo $NewTabl > $dirRes
Vous pensez, où est l'erreur? comment dois-je procédais?
Merci par avance pour votre aide !
7 réponses
-
salut,
en shell, la substitution de commandes s'effectue entre $( et )
=>var=$(commande)
il y a des tutos sur l'écriture de scripts shell ! -
Effectiment il faut rajouter $() Merci!
mais, j'ai toujours le problème pour la deuxième partie
pour stocker que les lignes respectant la condition dans un autre fichier
dirFichierInitiale=/home/Sukrat/Test/test.txt;
dirRes=/home/Sukrat/Test/NewTab.txt;
MinDistMax=$(cut -d" " -f3 $dirFichierInitiale | sort -n | sed '1,${1b;d}')
NewTabl=$(awk '$2 > $MinDistMax {print $1 " " $2 " " $3}')
echo $NewTabl > $dirRes
et même quand je mets echo $NewTabl pour voir ce qui se passe ça tourne sans rien m'afficher jusqu'à que je tape Ctrl C pour l'arrêter. -
-
en mettant comme ça:
NewTabl=$(awk '$2 > $MinDistMax {print $1 " " $2 " " $3}' $dirFichierInitiale)
echo $NewTabl
le script m'imprime une ligne vide -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
parce que $MinDistMax est une variable du shell, qui ne sera pas développée entre apostrophes.
passe la en argument à awkawk -v minmax="$MinDistMax" '$2 > minmax ...
-
-
avec fichier tel que
P1 8 12 P2 11 14 P3 9 11 P4 10 10 P5 8 10 P6 10 15 P7 14 12 P8 6 20 P9 4 24 P10 25 10
une solution, avec GNU awkgawk '{a[++n]=$0; if($3>x)x=$3}END{m=length(a); for(i=1;i<=m;i++){split(a[i],a2,FS); if(a2[2]<=x){print a[i]}}}' fichier P1 8 12 P2 11 14 P3 9 11 P4 10 10 P5 8 10 P6 10 15 P7 14 12 P8 6 20 P9 4 24