Como substituir o cabeçalho de um arquivo pelo cabeçalho de outro arquivo

6

Eu quero substituir o cabeçalho em file1.csv pelo cabeçalho em file2.csv

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

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

Eu quero o cabeçalho de file1.csv como

"x","y","z"

Por favor, me diga como fazer isso? Eu tentei

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

Mas não é preciso o "" (aspas). Eu quero o cabeçalho com as aspas.

    
por Pooja25 01.09.2016 / 17:43

3 respostas

6

Se você insistir em fazer isso com sed :

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

Sem sed :

( head -1 file2.csv; tail -n +2 file1.csv ) >file3.csv && mv file3.csv file1.csv
    
por 01.09.2016 / 18:04
3

Você pode escapar de qualquer barra invertida na primeira linha em file2.csv , pré-adicionar 1c\ e uma nova linha e q uit, canalizando as duas linhas resultantes para outro sed que lê o arquivo de script de stdin :

sed 's/\/&&/g;x;s/.*/1c\/;G;q' file2.csv | sed -i -f - file1.csv

ou com ed , abra file1.csv e leia em file2.csv cabeçalho após a primeira linha e exclua a primeira linha:

ed -s file1.csv <<\IN
1r ! head -n1 file2.csv
1d
w
q
IN
    
por 01.09.2016 / 19:17
1

Se file2.csv contiver apenas linha única

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

Se file2.csv contiver várias linhas

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

ou

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

Nota:

Se a linha de file2.csv contiver o caractere delimitador / , ocorrerá um erro como unknown option to 's' . Use diferentes delimitadores como | em tais casos

    
por 01.09.2016 / 18:15