Supprimer X octets dans un fichier

Supprimer X octets dans un fichier - Shell/Batch - Programmation

Marsh Posté le 12-02-2006 à 00:54:07    

Bonjour,
 
Je cherche désespérement une manière de supprimer X octets dans un fichier donné à l'aide des commandes qui nous sont mises à dispositions sous Linux mais je ne sais pas quoi prendre ni comment.
 
Je me mèle les pinceaux avec cut, cat, head, tail... :sweat:  
 
Avez-vous une idée ?
 
Cordialement.

Reply

Marsh Posté le 12-02-2006 à 00:54:07   

Reply

Marsh Posté le 12-02-2006 à 01:55:05    

L'idée générale, est de créer un nouveau fichier avec tous les octets sauf ceux qu'il faut supprimer, puis d'éliminer l'ancien fichier, et de renommer le nouveau fichier avec le nom de l'ancien fichier.
 
Ensuite, cela depend des cas.
Si les octets à supprimer sont ceux de la fin, alors il ne faut garder que ceux du début, de la tête, donc faire head.
Si les octets à supprimer sont en tête, il faut garde les octets de la fin, donc faire un tail.
Si les octets à supprimer sont au millieu, alors faire head et tail.
 
cat et cut n'ont pas vraiment d'intérêt pour ce problème-là.
 
Mais plutôt que head et tail, le plus simple est sans doute awk. Le seul petit inconvnient de awk est qu'il faut faire l'effort d'apprendre à s'en servir.

Reply

Marsh Posté le 12-02-2006 à 02:01:15    

Moi j'aurais besoin de supprimer 30 octets en tête d'un fichier par exemple, donc ça serait tail d'après ce que tu dis.
 
Peux-tu me donner un exemple pour le cas de 30 octets s'il te plait.

Reply

Marsh Posté le 12-02-2006 à 02:13:57    

Selon les shells Unix, l'instruction tail peut avoir des variantes, et d'autres part, je ne dispose pas d'Unix chez moi, donc voici une solution que je n'ai pas testée, et qui n'est peut-être pas optimale.
 
Habituellement tail peut accepter plusieurs paramètres dont un qui est la taille en octets. Donc, on fait

  tail -n$lg fic1.txt >fic1.tmp

Cela dit il manque une ligne au début pour connaître la valeur de la longueur à conserver (le $lg dans l'exemple).
Pour calculer cette longueur, on peut utiliser word count (wc) pour obtenir la taille totale du fichier et retrancher 30.

   lg=`wc -c <fic1.txt`
   lg=`expr $lg - 30`
   tail -n$lg fic1.txt >fic1.tmp
   rm fic1.txt
   mv fic1.tmp fic1.txt


Message édité par olivthill le 12-02-2006 à 02:15:32
Reply

Marsh Posté le 12-02-2006 à 02:28:22    

ok je te remercie beaucoup, je pense avoir compris, je m'en sortirai avec ton exemple.
 
merci encore.

Reply

Sujets relatifs:

Leave a Replay

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