Bash:Traitement des colonnes d'un fichier

Résolu
poiuytreza01234567890 Messages postés 57 Statut Membre -  
 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 !

7 réponses

  1. poiuytreza01234567890 Messages postés 57 Statut Membre
     
    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
  2. Utilisateur anonyme
     
    awk n'a pas de fichier à traiter. Il ne tourne pas, il attend.
    0
  3. poiuytreza01234567890 Messages postés 57 Statut Membre
     
    en mettant comme ça:
    NewTabl=$(awk '$2 > $MinDistMax {print $1 " " $2 " " $3}' $dirFichierInitiale)
    echo $NewTabl

    le script m'imprime une ligne vide
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Utilisateur anonyme
     
    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
  6. poiuytreza01234567890 Messages postés 57 Statut Membre
     
    Merci bcp pour votre aide !
    0
  7. Utilisateur anonyme
     
    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