[awk] suppression d'un élément pour comparer

bonjour,

comment faire pour supprimer le dernier élément d'un chemin avec awk,
et comparer le nouveau chemin avec une liste de chemins?

Par exemple, mon chemin:
1. je prends le chemin /usr/bin/cp
2. je supprime cp de la chaîne de caractères "/usr/bin/cp"
3. je compare la nouvelle chaîne "/usr/bin" avec une chaîne.

Merci

3 réponses

  1. Modérateur
    Salut,

    Tu pourrais faire comme suit (il y a surement d'autres façons de faire) :
    echo "/usr/bin/cp" | awk -F "/" '{ if($2 ~ /usr/ && $3 ~ /bin/) { print "OK" } }'
    ;-))
    0
    1. voilà, j'ai amélioré mon script:

       
      #! /bin/ksh
      
      PATH_SCP=`whence scp | sed "s/scp//"`
      echo $PATH_SCP
      LS_PATH=`echo $PATH | sed "s/:/ /g"`
      #echo $LS_PATH
      for path in $LS_PATH
              do echo "$path"
                      if ( $path == $PATH_SCP )
                      then echo "scp in path"
                      fi
              done
      


      seulement un problème demeure:

      lorsque je compare mes 2 strings $path et $PATH_SCP,

      j'obtiens:

      /usr/local/sbin
      ./check_bins.ksh[9]: /usr/local/sbin: cannot execute
      /usr/local/bin
      ./check_bins.ksh[9]: /usr/local/bin: cannot execute
      /usr/sbin
      ./check_bins.ksh[9]: /usr/sbin: cannot execute
      /usr/bin
      ..........

      qui peut me dire pourquoi cette erreur apparaît?

      Merci
      0
      1. Modérateur
        Salut,
        $ chemin=$(dirname $(which scp))
        $ echo $chemin
        /usr/bin
        $ pass=$(echo $PATH | sed "s/:/ /g")
        $ echo $pass
        /bin /usr/bin /usr/local/bin /usr/X11R6/bin/ /usr/games /home/jp/bin
        $ for nom in $(echo $pass); do if [ "$nom" = "$chemin" ]; then echo "scp in path"; fi; done
        scp in path
        $
        ;-))
        0