既存のCSVファイルにヘッダーの行を追加し、その場で編集したい。これどうやってするの?
echo 'one, two, three' > testfile.csv
で終わりたい
column1, column2, column3
one, two, three
最初のCSV出力を変更するのは手に負えません。
任意の標準コマンドで実行できます。重要なことは、ファイルがその場で編集され、ファイルの先頭に行が挿入されることです。
これにより、ファイルの先頭にカスタムテキストが追加されます。
echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
元の質問に答えるために、sedを使用して次のようにします。
sed -i '1icolumn1, column2, column3' testfile.csv
「1i」コマンドは、sedに1行目にテキストを挿入するよう指示します。
-iオプションを使用すると、ファイルは「インプレース」で編集され、オプションの引数を使用してバックアップファイルを作成することもできます。たとえば、
sed -i~ '1icolumn1, column2, column3' testfile.csv
「testfile.csv〜」に元のファイルを保持します。
これはsedを使用しませんが、>>を使用するとファイルに追加されます。例えば:
echo 'one, two, three' >> testfile.csv
Edit:ファイルの先頭に追加するには、次のようにします:
echo "text"|cat - yourfile > /tmp/out && mv /tmp/out yourfile
これは簡単な Google検索 で見つけました。
私の知る限り、あなたは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
?
2つのコマンドでファイルの先頭に特定の行を追加します。
cat <(echo "blablabla") input_file.txt > tmp_file.txt
mv tmp_file.txt input_file.txt
Perl -iを使用して、1行目の先頭を挿入したいものに置き換えます(.bkには元のファイルがバックアップされるという効果があります)。
Perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv