Bash:Traitement des colonnes d'un fichier
Résolu
poiuytreza01234567890
Messages postés
54
Date d'inscription
Statut
Membre
Dernière intervention
-
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 !
A voir également:
- Bash:Traitement des colonnes d'un fichier
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
7 réponses
salut,
en shell, la substitution de commandes s'effectue entre $( et )
=>
il y a des tutos sur l'écriture de scripts shell !
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.
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
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 à awk
passe la en argument à awk
awk -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 10une solution, avec GNU awk
gawk '{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