Bash:Traitement des colonnes d'un fichier

Résolu/Fermé
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - Modifié par poiuytreza01234567890 le 17/01/2013 à 21:54
 Utilisateur anonyme - 18 janv. 2013 à 08:30
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 !

A voir également:

7 réponses

Utilisateur anonyme
17 janv. 2013 à 22:38
salut,

en shell, la substitution de commandes s'effectue entre $( et )
=>
var=$(commande)

il y a des tutos sur l'écriture de scripts shell !
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 17/01/2013 à 22:51
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.
0
Utilisateur anonyme
17 janv. 2013 à 23:04
awk n'a pas de fichier à traiter. Il ne tourne pas, il attend.
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
17 janv. 2013 à 23:12
en mettant comme ça:
NewTabl=$(awk '$2 > $MinDistMax {print $1 " " $2 " " $3}' $dirFichierInitiale)
echo $NewTabl

le script m'imprime une ligne vide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 janv. 2013 à 23:46
parce que $MinDistMax est une variable du shell, qui ne sera pas développée entre apostrophes.
passe la en argument à awk
awk -v minmax="$MinDistMax" '$2 > minmax ...
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 18/01/2013 à 00:27
Merci bcp pour votre aide !
0
Utilisateur anonyme
18 janv. 2013 à 08:30
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 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
0