2016-05-23 1 views
0

Faisant suite à ma précédente question ici: Row limit in read.table.ffdf?supprimer les caractères non-ASCII interprétés comme EOF de fichier texte

J'ai un fichier texte avec> 285 millions de disques, mais environ les deux tiers du chemin à travers il y a plusieurs les caractères non-ASCII qui sont interprétés par AWK ainsi que plusieurs paquets R (ff, data.table) comme des octets EOF. Il semble que les caractères aient été saisis à l'origine en tant que signes de degré, mais apparaissent dans les éditeurs de texte sous forme de cases (see example here). Lorsque j'essaie de lire dans le fichier texte en utilisant ces méthodes, il s'arrête juste quand il rencontre le premier caractère, sans aucun message d'erreur comme s'il était complet.

Pour l'instant, j'ai été en mesure d'ouvrir le fichier dans un éditeur de texte pour supprimer ces caractères. Mais ce n'est pas une solution à long terme pour cet ensemble de données compte tenu de sa taille; Je dois pouvoir les enlever ou les contourner sans avoir à ouvrir le fichier entier. J'ai essayé d'utiliser l'option quote dans R, et j'ai essayé de remplacer tous les caractères non-ASCII et 'CTRL-M' spécifiquement pendant une importation awk, mais le processus de lecture s'arrête toujours au premier caractère. Des solutions? J'utilise R et awk maintenant, mais je suis ouvert aux autres options (python?). Merci!

+0

trouvez une façon d'attraper cette ligne fautive, puis de rediriger cette sortie par 'xxd' afin que nous puissions voir quelles sont les données réelles (juste la ligne avec des non-ASCII). Ajoutez ces données à votre Q en utilisant l'outil '{}' en haut à gauche de l'outil d'édition. Tel quel, nous sommes laissés à deviner et à jouer 20 questions. Bonne chance. – shellter

+1

Est-ce que 'gawk -v BINMODE = 3 '{gsub (/ [[: cntrl:]] /," ")} 1' les supprime-t-il? –

+0

Merci @Ed Morton, cela semble avoir fait l'affaire! – Michel

Répondre

0
gawk -v BINMODE=3 '{gsub(/[[:cntrl:]]/,"")}1 

va les supprimer.