Você deixou de fora o
bar=${bar:1}
linha de a resposta que você vinculou ; você precisa de
header=${header:1}
antes de sua linha sed
remover a vírgula inicial.
Eu quero colocar um cabeçalho no arquivo, mas recebo a primeira vírgula na saída. Código
#!/bash/bin
ids=(1 10)
filenameTarget=/tmp/result.csv
:> "${filenameTarget}"
echo "masi" > "${filenameTarget}"
header=$(printf ",%s" ${ids[@]}) # http://stackoverflow.com/a/2317171/54964
sed -i "1s/^/${header}\n/" "${filenameTarget}"
Saída
,1,10
masi
Saída esperada
1,10
masi
Debian: 8.5
Bash: 4,30
Você deixou de fora o
bar=${bar:1}
linha de a resposta que você vinculou ; você precisa de
header=${header:1}
antes de sua linha sed
remover a vírgula inicial.
Em vez de usar printf
, por que não usar as substituições embutidas do bash? Na seção sobre Matrizes :
subscripts differ only when the word appears within double quotes. If
the word is double-quoted, ${name[*]} expands to a single word with the
value of each array member separated by the first character of the IFS
special variable, and ${name[@]} expands each element of name to a sep‐
arate word. When there are no array members, ${name[@]} expands to
Então você pode:
$ IFS=,; echo "${ids[*]}"
1,10
$
Você também pode usar sed
para inserir uma linha inteira, como:
$ echo masi > foo
$ IFS=, sed -i "1i${ids[*]}" foo
$ cat foo
1,10
masi
$