Para não envolver alguns instrumentos pesados (como sed
ou awk
):
paste -d',' <(cut -d',' -f-2 file) column.file <(cut -d',' -f3- file)
Isso pressupõe que a coluna que você deseja adicionar está salva no arquivo column.file
.
Exemplo de dados:
"Monday","12345","Friday"
No arquivo acima, quero adicionar uma nova coluna entre 12345 e sexta-feira.
Como posso fazer isso?
Para não envolver alguns instrumentos pesados (como sed
ou awk
):
paste -d',' <(cut -d',' -f-2 file) column.file <(cut -d',' -f3- file)
Isso pressupõe que a coluna que você deseja adicionar está salva no arquivo column.file
.
Assumindo que seus dados são tão simples quanto você mostra, você pode fazer
awk -F, -v OFS=, '{k=$3; $3="\"new text\""; $4=k}1' file
Ou
perl -F, -lane 's/$F[1]/$F[1],"new text"/; print' file
No entanto, isso falhará com dados que podem conter vírgulas aninhadas como:
"foo", "bar,baz", "bar"
O acima é um arquivo csv válido, mas essas soluções o tratarão como tendo 4 campos, não 3. Se seus dados puderem conter casos como esse, você deverá usar um analisador csv apropriado.
Acabei de ter o mesmo problema, mas a resposta de cortar / colar não funcionou bem para mim, pois eu queria um campo em branco, então isso funcionou para mim:
Descubra quantas linhas você tem no arquivo que está inserindo:
wc -l file.csv
digamos que 1.
forneceu 30 e use um loop bash para inserir um campo nulo entre os campos 3 e amp; 4:
paste -d, <(cut -d, -f-3 file.csv) <(for i in 'seq 1 30'; do echo; done) <(cut -d, -f4- file.csv) > fileNew.csv
Tags text-processing awk csv columns