Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1170 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Ksh] inverser un fichier pour le lire à l'envers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Ksh] inverser un fichier pour le lire à l'envers

n°1447527
raoulglloq
Posté le 26-09-2006 à 12:28:17  profilanswer
 

Je voudrai lire un fichier à l'envers, de bas en haut.
 
J'utilise la fonction "while read line" qui ne semble pas le permettre.
Je pensai donc dans un premier temps inverser le fichier.
 
La commande sort possede l'option -r qui permet d'inverser le tri, cependant il effectue un tri alphanumerique en plus de l'inversion, ce que je ne veut pas, je veux juste inverser.
 
Or mon fichier est une log dont chaque ligne commence par "2006", je me demandait donc si il etat possible de restraindre le tri de la commande "sort" au premier caractère ("2" ). Cependant l'option des clé ne permet pas de le permettre: il commence en effet par tri sur le caractere correspondant à la clé, mais il tri ensuite sur le reste.
 
Qqun a t'il une solution?

mood
Publicité
Posté le 26-09-2006 à 12:28:17  profilanswer
 

n°1447536
skeye
Posté le 26-09-2006 à 12:51:20  profilanswer
 

Doit y avoir moyen de jouer avec un tail dans une boucle par exemple pour lire à l'envers...Mais il y a probablement plus approprié...[:petrus75]


---------------
Can't buy what I want because it's free -
n°1447541
lorill
Posté le 26-09-2006 à 13:08:08  profilanswer
 

si tu as tac sur ton systeme, c'est gagné.
 
et si tu es joueur, tu peux aussi t'amuser avec rev

n°1447554
raoulglloq
Posté le 26-09-2006 à 13:31:14  profilanswer
 

j'ai pas tac sur AIX, seulement sur Linux.
 
Par contre pour rev ca inverse l'ordre des ligne dans le sens ou les caracteres de droites passent à gauche, mais cela n'inverse pas le fichier lui meme, c'est à dire mettre la premiere ligne à la place de la derniere, ect...

n°1447557
lorill
Posté le 26-09-2006 à 13:33:58  profilanswer
 

oui, je sais que ca n'a rien a voir avec ton problème, mais je suis tombé dessus en cherchant, et ca m'a amusé (me faut pas grand chose en ce moment)

n°1447681
aigles
Posté le 26-09-2006 à 15:34:14  profilanswer
 

Ceci devrait faire l'affaire :

awk '{line[++count]=$0} END {for(i=count;i>0;i--) print line[i]}' infile > outfile


---------------
Jean Pierre.
n°1447911
Sve@r
Posté le 26-09-2006 à 22:43:34  profilanswer
 

raoulglloq a écrit :

Je voudrai lire un fichier à l'envers, de bas en haut.
 
J'utilise la fonction "while read line" qui ne semble pas le permettre.
Je pensai donc dans un premier temps inverser le fichier.
 
La commande sort possede l'option -r qui permet d'inverser le tri, cependant il effectue un tri alphanumerique en plus de l'inversion, ce que je ne veut pas, je veux juste inverser.
 
Or mon fichier est une log dont chaque ligne commence par "2006", je me demandait donc si il etat possible de restraindre le tri de la commande "sort" au premier caractère ("2" ). Cependant l'option des clé ne permet pas de le permettre: il commence en effet par tri sur le caractere correspondant à la clé, mais il tri ensuite sur le reste.
 
Qqun a t'il une solution?


 
Bon, Aigles a une jolie solution à base de "awk". Je vais donc innover en montrant un truc horrible
1) récupérer le nb de lignes en faisant "wc -l fichier"
2) faire une boucle de i allant "n" à 1 en affichant "head -n $i fichier |tail -1"
Ca marche aussi... :D  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1447917
Elmoricq
Modérateur
Posté le 26-09-2006 à 23:03:21  profilanswer
 

Sve@r a écrit :

Bon, Aigles a une jolie solution à base de "awk". Je vais donc innover en montrant un truc horrible
1) récupérer le nb de lignes en faisant "wc -l fichier"
2) faire une boucle de i allant "n" à 1 en affichant "head -n $i fichier |tail -1"
Ca marche aussi... :D


 [:nico0]
 
 
edit : je me demande s'il n'y a pas moyen de faire ça avec vi, aussi

Message cité 1 fois
Message édité par Elmoricq le 26-09-2006 à 23:04:03
n°1448164
raoulglloq
Posté le 27-09-2006 à 13:51:51  profilanswer
 

aigles a écrit :

Ceci devrait faire l'affaire :

awk '{line[++count]=$0} END {for(i=count;i>0;i--) print line[i]}' infile > outfile



 
Merci, je note ca dans mon carnet de note UNIX

n°1448229
Sve@r
Posté le 27-09-2006 à 15:11:14  profilanswer
 

Elmoricq a écrit :

[:nico0]
 
 
edit : je me demande s'il n'y a pas moyen de faire ça avec vi, aussi


 
Moi, une fois, j'avais voulu faire un karaoké en shell. C'est à dire un pgm qui prend un fichier texte et affiche chaque ligne et colorise chaque mot un après l'autre.
Pfff, j'ai assez vite abandonné l'idée... [:ddr555]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 27-09-2006 à 15:11:14  profilanswer
 

n°1448303
aigles
Posté le 27-09-2006 à 16:36:26  profilanswer
 

Mais oui c'est faisable avec vi !

vi a.a >/dev/null <<EOD
:g/^/m0
:x
EOD


Juste pour le fun, trois autres façons de faire  :D :

tail -r infile > outfile


perl -e 'print reverse <>' infile > outfile


sed -n '1!G;h:$p' infile > outfile


De toutes les solutions, je pense que c'est celle avec tail que me semble la plus simple.


---------------
Jean Pierre.
n°1448305
skeye
Posté le 27-09-2006 à 16:37:12  profilanswer
 

chuis trop fort.[:kbchris]


---------------
Can't buy what I want because it's free -
n°1448326
Elmoricq
Modérateur
Posté le 27-09-2006 à 16:47:57  profilanswer
 

perl je savais mais c'est une botte secrète [:dawa] (d'ailleurs "perl -i -e 'print reverse <>' inputfile" splus chouette)
 
tail j'avais oublié l'option -r mais je l'ai déjà utilisée
 
vi j'aurais jamais trouvé
 
et total respect pour la commande sed imbitable.
 
J'suis impressionné [:romf]

Message cité 1 fois
Message édité par Elmoricq le 27-09-2006 à 16:51:14
n°1448535
Sve@r
Posté le 28-09-2006 à 00:46:27  profilanswer
 

Elmoricq a écrit :

et total respect pour la commande sed imbitable.


C'est parce que c'est une syntaxe issue du grec ancien.[:romf]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1450390
Zavie
Test, du travail de pro !
Posté le 01-10-2006 à 13:42:32  profilanswer
 

Je suis sûr que l'on peut faire ça aussi en sed, mais là de tête je ne vois pas.

n°1450453
Sve@r
Posté le 01-10-2006 à 17:45:42  profilanswer
 

Zavie a écrit :

Je suis sûr que l'on peut faire ça aussi en sed, mais là de tête je ne vois pas.


T'as qu'à remonter le topic jusqu'à la solution de Aigles et là, tu verras...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1450523
Zavie
Test, du travail de pro !
Posté le 01-10-2006 à 21:26:37  profilanswer
 

Mouais, ouvrir les yeux, tout ça...


---------------
Viendez vous battre à Prologin \o/
n°1450766
Sve@r
Posté le 02-10-2006 à 13:55:56  profilanswer
 

Zavie a écrit :

Mouais, ouvrir les yeux, toussa...


Ca aide à mieux appréhender les choses... [:ddr555]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Ksh] inverser un fichier pour le lire à l'envers

 

Sujets relatifs
Expoter un fichier SWF en un fichier imageComment ajouter adsense dans un fichier JS
[PHP] Afficher derniere ligne d'un fichier texteEcrire la valeur ascii dans un fichier
Problème d'accentuation avec un fichier XMLLire le contenu d'une page web dans une macro Excel
Parsing de fichier?Listing de fichier comme sur FTP
Composer un nom de fichierTaille du fichier index
Plus de sujets relatifs à : [Ksh] inverser un fichier pour le lire à l'envers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR