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

dobson -  
jipicy Messages postés 41342 Statut Modérateur -
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
A voir également:

3 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
dobson
 
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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