如何用另一个文件的头替换一个文件的头

如何用另一个文件的头替换一个文件的头

我想file1.csv用 in 的标题替换 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

With gnu sed, using R(从指定文件中读取一行):

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.csv只包含单行

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

笔记:

如果 line fromfile2.csv包含分隔符/,它将抛出类似 的错误unknown option to `s'|在这种情况下使用不同的分隔符

相关内容