Operações aritméticas em uma coluna específica de um arquivo CSV no Bash

2

Estou tendo um arquivo cujo conteúdo é o seguinte:

A,10,20,30,40,50
B,20,40,10,30,60
C,30,50,20,40,10
D,40,50,20,10,30

Desejo realizar alguma operação aritmética (digamos, Divisão por 10) em uma coluna específica (digamos, coluna 3) do arquivo CSV acima. Então, lê-se:

A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30

Como isso pode ser feito?

    
por Mandar Shinde 22.04.2014 / 08:38

2 respostas

8

Tente isto:

% awk -F , -v OFS=, '$3/=10' <file
A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30
    
por 22.04.2014 / 08:41
1

Se você realmente quer fazer isso no bash, você pode:

$ while IFS="," read a b c rest; do 
    printf "%s,%s,%s,%s\n" $a $b $((c/10)) $rest; 
  done < file.csv 
A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30

Embora isso funcione para aritmética de inteiros simples, o bash não pode lidar com números de ponto flutuante, então se você tentasse uma operação aritmética que produzisse números não inteiros, ele falharia. Horrivelmente. O Bash realmente não é a melhor ferramenta para o trabalho aqui.

    
por 22.04.2014 / 14:22