Usando o AWK para extrair números do arquivo .CSV

0

Eu tenho um arquivo .CSV do qual preciso extrair números. Exemplo de arquivo:

#File of numbers
1,2,3,4,5
6,7,8,9,10

Eu quero usar o awk (ou outro utilitário) para extrair o primeiro número e o segundo número e armazená-los em uma variável para realizar cálculos dentro do meu script bash. Quero excluir a primeira linha que tem # no começo.

Depois de realizar o cálculo, quero extrair o terceiro número para continuar os cálculos e repetir até obter todos os números. Eu não sei como começar isso e gostaria de receber ajuda. Eu sei que vou precisar colocar o script awk dentro de um loop para obter o número três, quatro, etc., mas estou confuso com a forma de escrever o script awk.

    
por Nasir 15.03.2018 / 23:49

3 respostas

2

Usando um analisador csv real em uma :

#!/bin/bash

csvcut -c 1,2 -d, file.csv |
while IFS=, read -r c1 c2; do
    echo $((c1 * c2)) # do some arithmetic with variables c1 & c2
done

Verifique o csvkit

    
por 16.03.2018 / 00:35
1

A única maneira de resolver isso indo e voltando entre o awk e o shell é permitir que scripts do AWK gerem o código do shell para o próximo passo. Mas isso parece muito complicado para mim. Eu também recomendaria mover tudo para o awk (ou perl também seria permitido aqui?)

    
por 16.03.2018 / 10:01
0

Isso é bastante simples em bash e outros shells:

while IFS=, read a b c d e ; do
  your_stuff
  done < your_csv_file
  1. O IFS é o separador de campos de entrada. configure-o para o comando read apenas para ser uma vírgula.

  2. leia cinco variáveis de cada vez.

  3. Faça suas coisas com suas novas variáveis de shell $ a $ b $ c $ d $ e.

  4. Você deve definir o redirecionamento de entrada no final do loop while , depois da palavra-chave done .

por 16.03.2018 / 20:56