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
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.
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 {}
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 {}
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 {}
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 *
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 {}
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.
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