Décompressez de nombreux fichiers compressés au format ZIP avec des commandes Linux et attachez-les à UTF8

Je suis tombé sur un groupe de fichiers qui semblaient gênants à première vue, mais j'ai pu décompresser tous les fichiers, les convertir en UTF8 et les combiner en un seul fichier, alors j'ai pris une note. est.

--Beaucoup de fichiers ZIP --Il y a plusieurs fichiers CSV dans le fichier ZIP

environnement

La sauvegarde est absolue

Faites une sauvegarde afin de pouvoir accidentellement supprimer ou écraser le fichier zip d'origine. Ce n'est peut-être pas acceptable si vous pensez que c'est correct, alors assurez-vous de le faire.

Premier dégivrage

Tout d'abord, décompressez les nombreux fichiers ZIP ensemble. Cela peut être facilement fait avec la commande find. En ajoutant -j, la structure du répertoire est ignorée et décompressée, et l'option -B est ajoutée pour empêcher l'écrasement même si le nom de fichier est dupliqué à ce moment-là.

Il semble que vous puissiez convertir le nom du fichier en SJIS en spécifiant -O sjis avec ʻunzip`, mais j'ai rencontré plusieurs fois quand cela ne fonctionnait pas, donc je ne l'utilise pas ici.

Décompressez le fichier ZIP


mkdir work #Créer un répertoire de travail
cd work
find ../ -name '*.zip' -exec unzip -j -B {} \;

Vous pouvez également utiliser «ls» et «xargs» au lieu de «find».

Décompressez le fichier ZIP (en utilisant ls et xargs)


mkdir work #Créer un répertoire de travail
cd work
ls ../*.zip | xargs -I{} unzip -j -B {}

Que faire si le fichier ZIP est imbriqué?

Lorsque j'ai créé un fichier ZIP, il y avait un autre fichier ZIP. C'est une histoire courante, mais dans ce cas, décompressez-la à nouveau comme suit. Après la décompression, si le fichier ZIP sort à nouveau, exécutez-le à nouveau jusqu'à ce que vous vous sentiez à l'aise. Plus vous l'exécutez, plus vous avez de fichiers et plus vous avez de doublons, mais je prévois de supprimer les enregistrements en double plus tard, donc à ce stade, je pense que peu importe le nombre de fois que vous l'exécutez pour créer des doublons. ..

Si vous ne spécifiez pas comme * .zip, les fichiers autres que le format ZIP ne peuvent pas être décompressés et seule une erreur se produira, donc je pense que c'est correct, et parce que le nom de fichier a été déformé dans SJIS dans le passé, il ne frappe pas avec * .zip Parce qu'il y avait quelque chose.

Décompressez le fichier ZIP (si le fichier ZIP est imbriqué)


find ./ -type f -exec unzip -j -B {} \;

Il existe d'autres façons d'utiliser «ls» et «xargs», mais je pense qu'il vaut mieux choisir une méthode facile à comprendre plutôt que de l'écrire brièvement.

Décompressez le fichier ZIP (en utilisant ls et xargs)


ls * | xargs -I{} unzip -j -B {}

Supprimer les fichiers ZIP inutiles

Si vous le décompressez complètement, ce sera gênant si le fichier ZIP reste, alors supprimez-le. Si vous pouvez juger par l'extension, vous pouvez utiliser rm, mais cette fois je vais essayer de trouver et de supprimer le fichier dont le contenu est au format ZIP, en supposant que ce n'est pas le cas.

Ce n'est pas trop difficile non plus, et c'est étonnamment facile à faire avec file et grep. Vérifiez le fichier cible au cas où avant de le supprimer. S'il y a beaucoup de fichiers, cela prendra beaucoup de temps, donc si vous pouvez juger par le nom du fichier, je pense qu'il vaut mieux le supprimer avec rm * .zip.

Confirmation du fichier ZIP cible


file * | grep 'Zip archive' 

Effectuer la suppression du fichier ZIP


file * | grep 'Zip archive' | sed 's/: *Zip archive.*//' | xargs -I{} rm {}

Renommer le fichier en UTF8

Si le nom du fichier décompressé est SJIS, il sera déformé, changez donc tous les noms de fichiers en UTF8. C'est facile avec la commande convmv. Si vous n'avez pas convmv, installez-le avec sudo apt install convmv.

À propos, dans ce cas, les fichiers seront combinés en un plus tard, de sorte que le nom de fichier peut en fait être n'importe quoi. Même si vous ne pouvez pas le convertir correctement, vous n'êtes pas obligé de vous y tenir, et même si les caractères sont déformés, c'est presque normal.

Convertir le nom du fichier en UTF8


convmv -f sjis -t utf8 --notest *

Changez le contenu du fichier en UTF8 et changez le code de saut de ligne en LF

J'utilise le familier nkf. S'il n'est pas installé, installez-le avec sudo apt install nkf. nkf est pratique car vous pouvez convertir le code de caractère et changer le code de saut de ligne en même temps. S'il y a beaucoup de fichiers, ce sera "Trop de fichiers ouverts", donc j'utilise find, mais s'il y a peu de fichiers, je pense qu'il peut être écrit comme nkf ~ *.

Convertir le contenu du fichier en UTF8 (partie 1),Utilisez find)


find ./ -type f -exec nkf -Lu -w --overwrite {} \;

Convertir le contenu du fichier en UTF8 (partie 2),S'il y a peu de fichiers)


nkf -Lu -w --overwrite *

Convertir le contenu du fichier en UTF8 (partie 3),Utilisation de ls et xargs)


ls * | xargs -I{} nkf -Lu -w --overwrite {}

Rassemblez tous les fichiers, supprimez les doublons, compressez et enregistrez dans un seul fichier

Ce n'est peut-être pas si difficile si vous savez que "le nom de l'élément est inclus dans la première ligne de tous les fichiers CSV, vous ne pouvez donc pas simplement les attacher avec" chat "". C'est comme coller les données (en-tête) sur la première ligne et les données avec l'en-tête sur la première ligne supprimée de chaque fichier.

Compression Gzip en collant tous les fichiers ensemble et en supprimant les doublons


(cat * | head -1; ls * | xargs -I{} sed '1d' {} | sort | uniq) | gzip > all.csv.gz

D'ailleurs, si vous pouvez utiliser la "commande M" de "NYSOL", vous pouvez écrire comme suit. La commande M de NYSOL peut gérer non seulement les fichiers CSV, mais également les fichiers volumineux avec une petite quantité de mémoire, donc son utilisation est assez pratique.

Compression Gzip en collant tous les fichiers avec la commande M pour supprimer les doublons


mcat i=* | muniq k='*'  | mfldname -q | gzip > all.csv.gz

Il est compressé au format gzip, mais lorsque vous souhaitez vérifier la taille après la décompression, cela ressemble à ce qui suit.

Vérifiez la taille après le dépliage


zcat all.csv.gz | wc -l -c

Confirmation de la taille après expansion (résultat de l'exécution)


$ zcat all.csv.gz | wc -l -c
 748654 229449752

Lorsque vous décompressez le fichier compressé au format gzip, vous pouvez voir que le nombre d'enregistrements est d'environ 740 000 et que la taille du fichier est d'environ 200 Mo.

Pourquoi compresser?

Est-ce parce que les petits fichiers sont plus faciles à gérer? Cela dépend du contenu du fichier, mais je pense que la taille sera d'environ 1/8, et s'il s'agit de R data.table :: fread, il peut être écrit comme data.table :: fread ("zcat all.csv.gz"). N'est-il pas difficile à utiliser même s'il est compressé au format gzip?

Recommended Posts

Décompressez de nombreux fichiers compressés au format ZIP avec des commandes Linux et attachez-les à UTF8
Comment assembler de nombreux pipelines et les ranger en même temps
Commandes et fichiers pour vérifier la version de CentOS Linux
Débutants! Commandes et utilisation de base de Linux!
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
Est-il possible de se lancer dans une entreprise de pré-cotation et de faire fortune avec des stock-options?
Remplacez le nom du répertoire et le nom du fichier dans le répertoire par une commande Linux.
Utilisez shutil pour supprimer tous les dossiers avec un petit nombre de fichiers
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
[Linux] Comment subdiviser des fichiers et des dossiers
Histoire de créer un planétarium virtuel [jusqu'à ce que les débutants créent un modèle avec un script et parviennent à l'assembler]
Connectez beaucoup de Python ou et et
Spécifiez les positions de début et de fin des fichiers à inclure avec qiitap
Comment obtenir une liste de fichiers dans le même répertoire avec python
Script pour tweeter avec des multiples de 3 et des nombres avec 3 !!
[Commande Linux] Un mémorandum des commandes fréquemment utilisées
Que faire si pvcreate produit beaucoup d'AVERTISSEMENT et ne peut pas être créé
Mémorandum des commandes, packages, termes, etc. utilisés sous Linux (mis à jour de temps en temps)
Si tu es un homme, tais-toi et dis-lui de se lever avec un bâton