7 votes

Comment ajouter un caractère au début de chaque ligne d'un fichier de plus de 250 000 lignes en utilisant un script ?

J'ai un fichier texte de 250 000 lignes et je dois ajouter le même caractère unique au début de chaque ligne. J'ai essayé d'utiliser divers plugins d'édition multiligne/colonne dans Atom et Sublime mais ils se bloquent - je suppose que c'est dû à la taille du fichier.

Est-ce quelque chose que je pourrais faire avec un script de bash/zsh - ou AppleScript/Automator peut-être ?

10voto

Michael Zhou Points 167

Préparez chaque ligne d'un fichier avec un A majuscule et écrivez un nouveau fichier-

awk '{print "A"$0}' < FILE > NEWFILE

9voto

scruss Points 348

Préfixer X au début de chaque ligne de file en écrivant à newfile dans le terminal :

sed 's/^/X/' file > newfile

Ici, j'utilise sed l'éditeur de flux Unix, pour utiliser une méthode très simple expression régulière a s ubstituer le début de chaque ligne (l ^ ) avec un X.

2voto

nohillside Points 82672

L'éditeur de flux sed est probablement l'outil le plus rapide et le plus pointu construit exactement pour cette tâche.

Utilisez la commande d'insertion (la nouvelle ligne après \ fait partie de la syntaxe) :

sed 'i\
X' file > newfile

$ time sed 'i\                     
X' line250000 >/dev/null

real    0m0.118s
user    0m0.102s
sys     0m0.012s

Le délai ou la surcharge pour cette opération est extrêmement faible, ce qui la rend très efficace pour les fichiers volumineux.

1voto

OnePablo Points 1

Ce site bash précédera chaque ligne d'un fichier d'un hachage ( # ) et l'enregistrer dans un nouveau fichier :

IFS=$'\r\n'; printf '#%s\n' $(</path/to/file.txt) > /path/to/newfile.txt

Explication

  • IFS=$'\r\n' : Cela définit le séparateur de champs de sorte que seuls les caractères \r (retour chariot) et \n (nouvelle ligne) sont utilisés pour délimiter une chaîne de caractères. Le paramètre par défaut peut être restauré en utilisant : IFS=$' \t\n'

  • printf : C'est une commande intégrée dans bash qui est utilisé pour formater le texte en fonction du modèle fourni en premier argument. Dans ce cas, #%s\n lui indique de formater chaque argument suivant comme une chaîne régulière ( %s ), avant lequel il imprimera un caractère dièse et après lequel il imprimera une nouvelle ligne.

  • $(</path/to/file.txt) : Il s'agit d'une substitution de commande qui utilise une redirection d'entrée pour lui fournir le contenu d'un chemin de fichier. C'est l'équivalent de $(cat /path/to/file.txt) sans avoir à faire appel à cat .

  • > : Ceci redirige la sortie de la commande précédente, c'est-à-dire printf afin qu'il soit écrit dans le fichier au chemin d'accès spécifié. Si vos chemins d'accès aux fichiers contiennent des espaces, vous pouvez soit échapper à chaque espace en utilisant une barre oblique inverse précédente ( \ ), ou entourez le chemin du fichier de guillemets doubles, en vous assurant que tout ce que vous voulez que l'interpréteur de commandes développe se trouve à l'extérieur des guillemets, par ex. ~/Documents/My\ Massive\ File.txt ou ~/"My Massive File.txt"

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X