si j'ai un fichier .gz sous Unix qui a un certain nombre de lignes. Comment pourrais-je compter les lignes sur unix sans le décompresser.
command-line
unix
Vijay
la source
la source
Réponses:
Vous ne pouvez évidemment pas compter les nouvelles lignes si le fichier est toujours compressé.
Mais vous pouvez décompresser dans un flux et compter les nouvelles lignes de ce flux sans jamais écrire le fichier (décompressé) sur le disque. Cela irait quelque chose comme ceci:
zcat pour decompress & cat, wc pour wordcount. Voir les pages de manuel pour les deux si vous voulez en savoir plus.
MODIFIER
Si vous n'avez pas zcat, zcat n'est qu'un autre nom
gunzip -c
.la source
gzip
est distinct decompress
, vous voulezgzcat
.Cela semble également fonctionner - grep pour le nombre de fins de ligne dans le fichier
la source
wc -l
Si vous voulez le faire rapidement, je vous recommande d’utiliser «pigz» (IIRC signifie «Parallel Implementation of GZip»). Je viens de vivre une situation similaire dans laquelle je voulais compter le nombre de lignes dans un tas de fichiers gzipés et voici ma solution:
Ce qui m'a donné le nombre de lignes et le fichier qu'il comptait à partir de lignes alternées, en utilisant 8 processeurs. Ça a fonctionné vite!
la source
for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Utilisez cette commande:
La commande
gzgrep
se comporte de la même manièregrep
que sur les fichiers compressés gzip. Il décompresse le fichier à la volée pour la correspondance regex.Dans ce cas,
-c
indiquez à la commande de générer le nombre de lignes correspondantes et l'expression régulière$
correspondant à la fin de la ligne afin qu'elle corresponde à chaque ligne ou au fichier.Le résultat final est identique à
gzip -dc filename.gz | grep -c $
.la source
gzgrep
disponible sur d'autres systèmes que Solaris?Si vous êtes d'accord avec une estimation approximative plutôt qu'un décompte exact et que l'extraction de l'ensemble du fichier ou sa compression pour les fins de ligne prendrait beaucoup trop de temps (ce qui était mon cas tout à l'heure), vous pouvez:
le nombre de lignes approximatif est alors
1000 * (size of $file) / (size of 1000-line-sample)
, tant que vos données sont assez homogènes par ligne.la source
gzip -cd <file.gz> | wc -l
Cela a fonctionné pour moi.
la source