#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" ).
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
PS : je demande pas forcément un code tout chaud, mais ne serait ce que des mots clés !!!
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 )
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
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...
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)
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 !
Je suis pas capable de savoir si ça colle à ce que je dois faire, mais je vais bitouiller tout ça de ce pas !
Hors ligne