Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/07/2014, à 20:22

Seabirds

Décompression à la volée et redirection

Bonjour à tout le monde !
Le gros noob appelle à l'aide pour faire un petit script-en-bash-de-rien-du-tout-mais-toutefois-très-contrariant ^^
Invoquons à regret la phrase magique : "j'y suis depuis deux jours et mes recherches ont été infructueuses" sad ).
J'ai des fichiers de données assez gros (mettons tata.txt et toto.txt ) avec admettons ce format là :

1 2 3 4
5 6 7 8
8 7 6 5
4 3 2 1

Comme ces fichiers sont très gros et très nombreux ils ont été compressés (.tar.bz2) et comme j'ai pas bezef de temps, je cherche à lire ces gros fichiers compressés en évitant de les décompresser (sachant que je dois plus tard les rediriger vers un autre programme :

bunzip2 -c temp.tar.bz2

ça me donne une jolie sortie :

tata.txt0000664000175000017500000000004012361267115011230 0ustar  arnoarno1 2 3 4
5 6 7 8
8 7 6 5
4 3 2 1
toto.txt0000664000175000017500000000004012361267044011265 0ustar  arnoarno1 2 3 4
4 3 2 1
5 6 7 8
8 7 6 5

Sauf que je n'arrive pas à :
1) Rediriger proprement la sortie de bunzip2 -c dans un fichiers texte pour retrouver le format de départ :

echo $( bunzip2 -c temp.tar.bz2 ) > titi.txt 

donne un truc très sale, sans retour chariot...

2) Séparer les données des deux fichiers sans avoir à les décompresser (c'est pas possible de demander au processus de s'arrêter après avoir décompresser à la volée le premier fichier, analyser les données, puis décompresser à la volée le deuxième fichier ?

Merci de votre aide smile
PS : je demande pas forcément un code tout chaud, mais ne serait ce que des mots clés !!! big_smile

Hors ligne

#2 Le 15/07/2014, à 20:39

pingouinux

Re : Décompression à la volée et redirection

Bonsoir,
Pour décompresser les fichiers un à un, et les éditer avec vi (par exemple) :

#!/bin/bash

for f in $(tar tfj temp.tar.bz2)
do
   tar xfj temp.tar.bz2 "$f"
   vi "$f"
done

Hors ligne

#3 Le 15/07/2014, à 20:40

jplemoine

Re : Décompression à la volée et redirection

plutôt que vi, on ne peut faire un nano voire un cat ?


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#4 Le 15/07/2014, à 20:50

pingouinux

Re : Décompression à la volée et redirection

Bien sûr, c'était juste un exemple (avec ce que j'utilise habituellement smile)

Hors ligne

#5 Le 15/07/2014, à 21:11

Seabirds

Re : Décompression à la volée et redirection

Génial pingouinux ! Un joli code tout chaud ! lol big_smile
Cool pour la boucle sur tar tf, c'était dans un premier temps ce que je voulais faire (sans savoir comment ^^)  !

Mais ces fichiers sont vraiment lourds, ce ne serait pas mieux d'utiliser la décompression à la volée, et de rediriger la sortie vers mon autre programme ? Si oui,  avez vous une idée de comment respecter le format des données ?
Que de questions... roll

Hors ligne

#6 Le 15/07/2014, à 21:31

pingouinux

Re : Décompression à la volée et redirection

Si les noms des fichiers compressés contiennent des espaces, il faut procéder ainsi :

#/bin/bash

while read f
do
   tar xfj temp.tar.bz2 "$f"
   # Traitement de "$f"
done < <(tar tfj temp.tar.bz2)
Seabirds #5 a écrit :

Mais ces fichiers sont vraiment lourds, ce ne serait pas mieux d'utiliser la décompression à la volée, et de rediriger la sortie vers mon autre programme ?

Voir éventuellement l'option --to-command de tar (que je n'ai jamais testée). Voici un extrait de man tar :

--to-command=COMMAND
           pipe extracted files to another program

Ajouté :

Après essai, il semble que ces deux façons de faire soient équivalentes

while read f
do
   tar xfj  temp.tar.bz2 "$f"
   cat "$f"
done < <(tar tfj temp.tar.bz2)

et

while read f
do
   tar xfj  temp.tar.bz2 --to-command=cat "$f"
done < <(tar tfj temp.tar.bz2)

Dernière modification par pingouinux (Le 15/07/2014, à 21:40)

Hors ligne

#7 Le 15/07/2014, à 21:40

Seabirds

Re : Décompression à la volée et redirection

Super merci beaucoup ! smile
Je suis pas capable de savoir si ça colle à ce que je dois faire, mais je vais bitouiller tout ça de ce pas ! smile

Hors ligne