rediriger le flux echo $path | grep u$

rediriger le flux echo $path | grep u$ - Codes et scripts - Linux et OS Alternatifs

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
Reply

Marsh Posté le 21-09-2004 à 16:06:25   

Reply

Marsh Posté le 21-09-2004 à 16:14:45    

awk :  
 

Code :
  1. awk '{if (NR == numéro_de_ligne) print $0}' fichier_à_lire


Message édité par cycojesus le 21-09-2004 à 16:15:34

---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
Reply

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

Reply

Marsh Posté le 21-09-2004 à 16:44:43    

c'est effectivement bougrement pratique pour le traitement de flux de caractères ;)


---------------
get amaroK plugin
Reply

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 :
  1. max=`wc -l filedesti | cut -d " " -f 1`;
  2. declare -i i;
  3. for ((i=1 ;i <=max; i++))
  4. do
  5.         filepath=`awk '{if (NR == $i) print $0}' filedesti`;
  6.         echo $i _ $filepath;
  7. done


Reply

Marsh Posté le 21-09-2004 à 16:51:08    

pour que ce soit plus explicite le programme me retourne :
 
 

Code :
  1. [weedalex@localhost Documents]$ ./guillbis /home/weed/Documents/prog/ /home/weed/Documents/prog/
  2. hhh
  3. 1 _
  4. 2 _
  5. 3 _
  6. 4 _
  7. 5 _
  8. 6 _
  9. 7 _
  10. 8 _
  11. 9 _
  12. .....
  13. 104 _
  14. 105 _
  15. [weed@localhost Documents]$

Reply

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 :
  1. gawk -v racine=$RACINE -v annee=$ANNEE -v mois=$MOIS -v jour=$JOUR '{ if (NR == 15) { printf "user_pref(\"browser.download.dir\", \"%s/%s/%s/%s\" );\n", racine, annee, mois, jour } else { print $0 } }' $PREFS_JS


 
l'option -v de awk défini une variable dans le script awk


Message édité par cycojesus le 21-09-2004 à 16:59:42

---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
Reply

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 :
  1. for ((i=1 ;i <=max; i++))
  2. do
  3.         filepath=`gawk -v n=$i '{if (NR == n) print $0}' filedesti`;
  4.         echo $i _ $filepath;
  5. done

Reply

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

Reply

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 ;)


---------------
get amaroK plugin
Reply

Marsh Posté le 21-09-2004 à 17:54:51   

Reply

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.

Reply

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


---------------
get amaroK plugin
Reply

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"


---------------
get amaroK plugin
Reply

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 ;)

Reply

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.  
 
J'ai regarder du coté de tail mais on est obliger d'utiliser les options - ou +....


Pas très élégant : tail +[num_ligne] | head -1


---------------
Un bon script vaut tous les clicks du monde. | Errements Alternatifs
Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed