2009-03-18 12 views
1

Je veux effectuer cettetâche de préforme gunzip et rezip

awk -F, '$1 ~ /F$/' file.dat 

sur un direcory ensemble des fichiers gziped

Je veux être en mesure de boucle à travers chaque fichier DEZIPPER exécuter la commande ci-dessus (imprimer des résultats) rezip et passer au prochain fichier compressé

comment cela peut-il être fait?

Merci

+0

zcat est votre ami –

Répondre

0

Que diriez-vous d'un script shell qui fait:

gunzip $1.gz 
awk -F, '$1 ~ /F$/' $1 
gzip $1 

Assurez-vous $1 ne porte pas l'extension .gz.

alors vous pouvez faire quelque chose comme:

find -name \*.gz -type f|xargs my_shell_script 
+0

je ne sais pas comment faire des scripts shell .... encore –

3

Eh bien, si vous devez avoir en une seule ligne:

find . -name \*.gz -print0 | xargs -0 gunzip -c | awk -F, '$1 ~ /F$/' 

Ce devrait travail pour vous

+0

Sauf qu'il ne rezip à la fin. –

2

Il semble pour moi que vous voulez sortir des lignes où le premier champ, dans une liste de champs séparés par des virgules, se termine par 'F'

Si vous ne vous souciez pas de savoir de quel fichier .gz proviennent les lignes, ou quel fichier se trouve dans le fichier gzippé, c'est-à-dire que vous voulez simplement les lignes listées, vous n'avez même pas besoin de les lancer. gz fichiers d'abord, de cette façon vous ne devrez pas les re-zip.

zcat file.gz | awk -F, '$1 ~ /F$/' 

Pour chaque fichier de l'arborescence de répertoires actuelle, utilisez une recherche avec xargs. Cet exemple, il limite seulement le répertoire courant, mais il suffit de laisser le « -maxdepth 1 » pour obtenir l'arborescence tout

find . -maxdepth 1 -name \*.gz -print0 | xargs -0 zcat | awk -F, '$1 ~ /F$/' 

Ceci dit pour trouver les fichiers qui se terminent par « .gz » et d'écrire leurs noms avec un terminateur NUL (le 0 dans -print0), pipe qui sortit par xargs qui va choisir la liste en se basant sur NUL chacracters (l'argument "-0") et lancer zcat sur les fichiers. Pipe cette sortie via votre commande awk et vous obtiendrez les lignes pertinentes écrites.