rediriger le flux echo $path | grep u$ - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 21-09-2004 à 16:14:45
awk :
Code :
|
Marsh Posté le 21-09-2004 à 16:27:43
impécable.
je connais pas tres bien awk. Dans les exemple simple, j'ai vu que je pouvais le remplacer par un simple cut ....
Mais visiblement ca permet bcp plus de chose que ca, il faudrait que passe un peu de temps à comprendre comment fonctionne awk, j'ai l'impression
Marsh Posté le 21-09-2004 à 16:44:43
c'est effectivement bougrement pratique pour le traitement de flux de caractères
Marsh Posté le 21-09-2004 à 16:48:24
arf zut je n'arrive pas à utiliser une variable dans le awk pour le numéro de ligne comment faut il s'y prendre ?
lorsque je remplace $i par un chiffre par exemple 2, ca fonctionne bien mais pas avec une variable.
Code :
|
Marsh Posté le 21-09-2004 à 16:51:08
pour que ce soit plus explicite le programme me retourne :
Code :
|
Marsh Posté le 21-09-2004 à 16:57:13
la solution que j'ai trouvé pour utiliser une variable dans awk c'est ce genre de chose (extrait de script) :
Code :
|
l'option -v de awk défini une variable dans le script awk
Marsh Posté le 21-09-2004 à 17:25:17
merci beaucoup cycojesus
je pensais que ca allais compliqué ton astuce mais non, j'ai compris
Code :
|
Marsh Posté le 21-09-2004 à 17:39:01
pour ton truc t'as
awk '{ print NR,$0; }' ton_fichier
NR est une variable interne de awk qui donne le numéro de la ligne
Marsh Posté le 21-09-2004 à 17:54:51
il suffit de fermer et réouvrir les guillemets sinon
filepath=`awk '{if (NR == '$i') print $0}' filedesti`; |
ça devrait marcher comme ça
Marsh Posté le 21-09-2004 à 20:17:19
A tout hasard comment peut 'on tester le dernier caractère d'une variable ?
j'ai réussi en faisant un :
echo $path | grep /$ && r=$path || r=$path$slash
je teste si la variable path contient le caractère / à la fin, si ce n'est pas je rajoute le caractère / (en fait $slash) et j'affecte à r....
Ca marche mais le probleme c'est que le premier echo affiche path. Peut t'on redirger le flux de echo avec les pipes de facon à ce que echo $path n'affiche plus à l'écran.
sinon j'ai regardé su coté de awk, il existe bien la variable $NF mais awk necessite l'utilisation d'un fichier alors que j'aimerais tester une variable.
Marsh Posté le 22-09-2004 à 09:48:35
ce n'est pas le echo qui affiche la chaine mais grep
Il suffit de rajouter une redirection vers le "puit sans fond" /dev/null :
echo $path | grep /$ > /dev/null && r=$path || r=$path$slash |
Marsh Posté le 22-09-2004 à 09:50:40
awk ne nécessite pas forcément un fichier !
echo "pouet" | awk '{ print substr($1,length($1)); }' |
me donne : "t"
Marsh Posté le 22-09-2004 à 21:18:00
un tres grand merci à toi bobuse. La prochaine fois je saurais ...
et merci pour l'astuce du awk.
Juste une petite remarque si je puis me permettre, dans ton cas, subchar serait presque plus adapté. La fonction subchar n'existe peut etre pas par contre en bash
Marsh Posté le 23-09-2004 à 11:16:53
weed a écrit : voila je cherche une commande qui me permettrait de lire la ligne X dans un fichier. |
Pas très élégant : tail +[num_ligne] | head -1
Marsh Posté le 23-09-2004 à 12:30:43
arf zut j'avais oublié cette fonction. Je l'ai juste utilisé une fois pour depanner quelqu'un. En effet c'est la methode la plus éléguante.
merci serialcleaner
Marsh Posté le 21-09-2004 à 16:06:25
voila je cherche une commande qui me permettrait de lire la ligne X dans un fichier.
J'ai regarder du coté de tail mais on est obliger d'utiliser les options - ou +....
Message édité par weed le 21-09-2004 à 20:19:08