Manipulação de dados do libreoffice calc (planilha eletrônica) usando comandos do terminal

0

É possível manipular dados no LibreOffice calc (planilha eletrônica) usando comandos do terminal. Eu tenho uma planilha com cargas de dados no formato csv e eu quero fazer a manuplicação de dados do terminal sem abrir o libreoffice.

o csv contém 5 colunas

columns 
A   B   C   D   E

em que eu quero excluir os dados nas colunas B, C e E, copie os dados da coluna D para a coluna B.

Em seguida, na coluna C vazia no local C5, quero adicionar essa equação = ( B5*($B1/$A1) ) e de C6 nas alas até o final dos dados ( C6:Cn ). Quero executar este código =((A6+B6)*C5)

Esse tipo de manipulação pode ser feito usando apenas comandos de terminal?

Este é o arquivo csv

    
por Eka 19.06.2015 / 10:13

1 resposta

3

A maneira mais fácil é salvar o arquivo do libreoffice em um formato CSV padronizado, geralmente com "," como delimitador e citando texto em ("), e salvando fórmulas como tal. Seus dados devem ficar assim:

7,444,5555,99,"bcdef"
22,444,5555,99,"bcdef"

Você pode manipular isso com um simples comando awk (por exemplo). Você pode incluir fórmulas nos campos iniciando-os com "=". Por exemplo,

5,99,"=(B5*(B1/A1))"

Você então lê esse arquivo .csv no libreoffice. Normalmente, deve preservar as fórmulas.

Veja um exemplo de script awk para manipular um arquivo example.csv no arquivo new.csv substituindo as colunas conforme você especificou, com Cn com a fórmula ((An + Bn) * C5). / p>

awk -F, <example.csv >new.csv '
NR<=4 { printf "%s,%s\n",$1,$4 }
NR==5 { printf "%s,%s,\"%s\"\n",$1,$4,"=(B5*(B1/A1))" }
NR>=6 { printf "%s,%s,\"=((A%d+B%d)*C%d)\"\n",$1,$4,NR,NR,5; }
'

Você pode converter o new.csv para .ods com:

libreoffice --convert-to ods new.csv

Se os seus dados contiverem "," e (") você precisa alterar os delimitadores usados em todos os lugares.

(Para salvar células com fórmulas como csv: Salvar como, Tipo de arquivo Texto CSV, marque Editar configurações de filtro, Salvar, Opções de campo: marque Salvar fórmulas de célula, assinalar Citar todas as células de texto.)

Eu olhei para seu arquivo data.csv de exemplo e na minha discussão copiei para example.csv. Eu removi a linha 1 "A, B, C, D, E" (os cabeçalhos das colunas), pois isso torna mais difícil explicar a correspondência dos números de linha no arquivo com as linhas da tabela. Eu fiz isso com este comando sed:

sed -i '1{/A,B,C/d}' example.csv

Você pode restaurar o cabeçalho no final se precisar:

sed -i '1i\A,B,C' new.csv

Se você quiser realmente fazer a fórmula aritmética fora do libreoffice , você pode fazer isso no awk da seguinte maneira. awk lê os dados uma linha por vez e executa cada comando em {}. $ 1 é definido para a coluna 1 e assim por diante (como -F, as colunas de médias são separadas por ","). Podemos salvar esses valores em uma matriz indexada pelo número da linha, por exemplo, A [NR] = $ 1 salva a coluna 1 (coluna A) da linha NR (linha atual) na matriz A. C [NR] pode ser definido para o cálculo resultante. Podemos então usá-los novamente em linhas posteriores:

awk -F, <example.csv >new.csv '
      { A[NR]=$1; B[NR]=$4 }
NR<=4 { printf "%s,%s\n",A[NR],B[NR] }
NR==5 { C[NR] = B[5]*(B[1]/A[1]); printf "%s,%s,%s\n",A[NR],B[NR],C[NR] }
NR>=6 { C[NR] = (A[NR]+B[NR])*C[5]; printf "%s,%s,%s\n",A[NR],B[NR],C[NR] }
'
    
por meuh 19.06.2015 / 16:03