Eu tenho um csv cujo final está faltando dados de coluna, por exemplo, o seguinte:
Data1,Data2,User
abc,def,foo
hij,klm,foo
nop,qrs
tuv,wxy
Neste caso quero adicionar bar
no final das linhas sem foo
. Isso é facilmente conseguido com sed '/foo/!s/$/,bar/'
. O problema é que isso também adicionará um ,bar
à primeira linha. Eu sei que posso pular a primeira linha com a, 2,$
mas quando faço isso parece não respeitar as instruções de "número de linha" e "pesquisa negada". Existe uma maneira dentro do sed incorporar ambos?
(Para ser claro, sei que tenho outras opções. Provavelmente posso fazer várias operações sed ou posso escrever uma macro simples no vim e ser feita em um segundo também. Mas, neste caso, quero ver se isso pode ser feito inteiramente em um único sed.)
Isso pode funcionar para você (GNU sed):
Se não for a primeira linha e uma linha não contiver
foo
append,bar
.Alternativa:
Aqui está um
sed
comando que deve funcionar com qualquer versão dosed
:Se você quiser dar
awk
uma chance então é muito mais fácil com qualquer versão do awk: