Je souhaite ajouter une ligne d'en-têtes à un fichier CSV existant, en modifiant sur place. Comment puis-je faire ceci?
echo 'one, two, three' > testfile.csv
et je veux finir avec
column1, column2, column3
one, two, three
Changer la sortie CSV initiale est hors de ma portée.
N'importe quelle commande standard fera l'affaire. L'important est que le fichier soit édité sur place et que la ligne soit insérée au début du fichier.
Cela ajoute du texte personnalisé au début de votre fichier:
echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
Pour répondre à votre question initiale, voici comment procéder avec sed:
sed -i '1icolumn1, column2, column3' testfile.csv
La commande "1i" indique à sed d'aller à la ligne 1 et d'y insérer le texte.
L'option -i entraîne la modification du fichier "sur place" et peut également prendre un argument facultatif pour créer un fichier de sauvegarde, par exemple
sed -i~ '1icolumn1, column2, column3' testfile.csv
conserverait le fichier d'origine dans "testfile.csv ~".
Cela n'utilise pas sed, mais l'utilisation de >> s'ajoutera à un fichier. Par exemple:
echo 'one, two, three' >> testfile.csv
Modifier : pour ajouter un préfixe à un fichier, essayez quelque chose comme ceci:
echo "text"|cat - yourfile > /tmp/out && mv /tmp/out yourfile
Je l'ai trouvé grâce à un rapide recherche Google .
Si je comprends bien, vous souhaitez ajouter column1, column2, column3
À votre one, two, three
Existant.
J'utiliserais ed
à la place de sed
, puisque sed
écrit sur la sortie standard et non dans le fichier.
La commande:
printf '0a\ncolumn1, column2, column3\n.\nw\n' | ed testfile.csv
devrait faire le travail.
Perl -i
Vaut également le coup d'œil.
sed est basé sur la ligne, donc je ne sais pas pourquoi vous voulez faire ça avec sed. Le paradigme consiste plus à traiter une ligne à la fois (vous pouvez également trouver par programmation le nombre de champs dans le CSV et générer votre ligne d'en-tête avec awk) Pourquoi pas seulement
echo "c1, c2, ... " >> file
cat testfile.csv >> file
?
Ajoutez une ligne donnée au début d'un fichier dans deux commandes:
cat <(echo "blablabla") input_file.txt > tmp_file.txt
mv tmp_file.txt input_file.txt
Utilisez Perl -i, avec une commande qui remplace le début de la ligne 1 par ce que vous souhaitez insérer (le .bk aura pour effet que votre fichier d'origine est sauvegardé):
Perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv