既存のCSVファイルにヘッダーの行を追加し、その場で編集したいと思います。これどうやってするの?
echo 'one, two, three' > testfile.csv
そして私は
column1, column2, column3
one, two, three
最初のCSV出力を変更するのは私の手に負えません。
どの標準コマンドでもかまいません。重要なのは、ファイルがその場で編集され、ファイルの先頭に行が挿入されることです。
元の質問に答えるために、sed でそれを行う方法は次のとおりです。
sed -i '1icolumn1, column2, column3' testfile.csv
「1i」コマンドは、1 行目に移動してそこにテキストを挿入するように sed に指示します。
-i オプションを使用すると、ファイルが「その場で」編集され、オプションの引数を使用してバックアップ ファイルを作成することもできます。たとえば、
sed -i~ '1icolumn1, column2, column3' testfile.csv
元のファイルを「testfile.csv~」に保持します。
これにより、ファイルの先頭にカスタムテキストが追加されます。
echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
これはsedを使用しませんが、>>を使用するとファイルに追加されます。例えば:
echo 'one, two, three' >> testfile.csv
編集:ファイルの先頭に追加するには、次のようにしてみてください。
echo "text"|cat - yourfile > /tmp/out && mv /tmp/out yourfile
私はこれをグーグルで簡単に検索して見つけました。
私が理解している限りcolumn1, column2, column3
、既存のone, two, three
.
ファイルではなく標準出力に書き込むため、ed
の代わりに使用します。sed
sed
コマンド:
printf '0a\ncolumn1, column2, column3\n.\nw\n' | ed testfile.csv
仕事をするべきです。
perl -i
も一見の価値があります。
sedは行ベースなので、sedでこれを実行する理由がわかりません。このパラダイムは、一度に1行ずつ処理することです(CSV内のフィールドの数をプログラムで検索し、awkを使用してヘッダー行を生成することもできます)。
echo "c1, c2, ... " >> file
cat testfile.csv >> file
?
perl -iを使用して、1行目の先頭を挿入したいものに置き換えるコマンドを使用します(.bkは、元のファイルがバックアップされる効果があります)。
perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv