23 votes

insérer une ligne dans un fichier csv

J'ai un énorme fichier csv (de l'ordre du téraoctet).

Maintenant, je veux insérer une ligne qui est un en-tête en haut.

Par exemple, si input.csv ressemble à ceci :

 1,2,3,4
 22,3,23,1

Je veux que ça ressemble à

id1,id2,id3,id4
 1,2,3,4
 and so on

Comment puis-je faire cela à partir d'un shell, d'un terminal, d'awk, de bash ?

38voto

Lee Netherton Points 4712

En place, en utilisant sed :

sed -i 1i"id1,id2,id3,id4" file.csv

éditer :

Comme le souligne @Ed Morton, utiliser sed avec l'option -i Le commutateur sed édite le fichier en place, et peut donc être dangereux lors de l'édition de gros fichiers. Si vous fournissez un préfixe après l'option -i l'option sed crée alors une sauvegarde. Donc quelque chose comme ça serait plus sûr :

sed -i.bak 1i"id1,id2,id3,id4" file.csv

Le fichier original sera alors situé dans file.csv.bak

17voto

sputnick Points 31663

C'est aussi simple que cela :

{ echo "id1,id2,id3,id4"; cat file.csv; } > newfile.csv

en utilisant une simple concaténation shell.

EDIT

après le fil de discussion ci-dessous, je propose ceci :

  • créer un fichier avec votre en-tête, dit head.txt

Ensuite :

cat head.txt file.csv > newfile.csv

3voto

gniourf_gniourf Points 9393

Edit. Lorsque j'ai rédigé cette réponse, j'ai négligé la partie "téraoctet" de la question. Donc, ne pas utiliser la méthode présentée ici . Je laisse quand même ce post, car il fait la publicité de cet outil merveilleux, ed l'éditeur de texte standard.

Comme d'habitude, ed est l'éditeur de texte standard. La solution utilisant sed -i n'édite pas, comme il le mentionne, "le fichier en place". Au lieu de cela, il édite son contenu dans un fichier temporaire, puis renomme ce fichier en celui d'origine. Ce n'est vraiment pas bon pour les gros fichiers !

Utilisation de ed au lieu d'éditer réellement le fichier. Quelque chose comme ça :

#!/bin/bash

file="input.csv"

{
ed -s "$file" <<EOF
1
i
id1,id2,id3,id4
.
wq
EOF
} > /dev/null

Explication : 1 va à la première ligne, i passe en mode insertion, puis nous insérons id1,id2,id3,id4 puis . pour revenir au mode normal, et wq d'écrire et d'abandonner.

Avec cette méthode, vous éditez réellement le fichier et c'est deux fois plus rapide que la méthode sed. Aussi, ed est connu pour être "sûr pour les gros fichiers" !

C'est fait.

1voto

shellter Points 15304

Il n'y a pas de moyen facile, vous allez devoir réécrire le fichier. Le moyen le plus sûr est sans doute de

 ( echo "id1,id2,id3,id4" ; cat file ) > newFile && rm file

IHTH

-2voto

user5192499 Points 1

Echo "id1,id2,id3,id4" >> data.csv

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X