あるファイルのヘッダーを別のファイルのヘッダーに置き換える方法

あるファイルのヘッダーを別のファイルのヘッダーに置き換える方法

file1.csvinのタイトルをinのタイトルに置き換えたいと思います。file2.csv

file1.csv
"a","b","c"

file2.csv
"x","y","z"

私が望むタイトルfile1.csv

"x","y","z"

何をすべきか教えてください。頑張った

sed -i "1 s/^.*$/$file2.csv/" file1.csv

""ただし、(引用符)は含まれません。タイトルに引用符を付けたいです。

答え1

この仕事にこだわる場合sed

( sed 1q file2.csv; sed 1d file1.csv ) >file3.csv && mv file3.csv file1.csv

いいえsed:

( head -1 file2.csv; tail -n +2 file1.csv ) >file3.csv && mv file3.csv file1.csv

答え2

gnu sedを使用して(R指定されたファイルから1行を読む):

sed -i -e '1{R SOURCE' -e 'd}' DESTINATION

またはを使用して、最初の行の後のヘッダーをed開き、DESTINATION読み取りしてから最初の行を削除します。SOURCE

ed -s DESTINATION <<\IN
1r ! head -n1 SOURCE
1d
w
q
IN

答え3

file2.csv1行だけが含まれている場合

sed -i "1 s/.*/$(< file2.csv)/" file1.csv

file2.csv複数行が含まれる場合

sed -i "1 s/.*/$(sed '1q' file2.csv)/" file1.csv

または

sed -i "1 s/.*/$(head -1 file2.csv)/" file1.csv

メモ:

file2.csv次の行に区切り文字が含まれていると、/同様のエラーが発生しますunknown option to `s'|この場合は、別の区切り文字を使用してください。

関連情報