Execute o comando do Linux somente se a coluna no arquivo CSV tiver um valor maior que 1

1

Estou tentando descobrir uma maneira de executar um comando do Linux somente se uma coluna específica no meu arquivo CSV tiver um valor maior que 1.

Exemplo de arquivo CSV:

Item,Quantity  
Pen,1  
Pencil,1  
Stapler,3  

Usando o exemplo acima, gostaria que meu script verificasse a coluna 2 do CSV e, se ela encontrasse valor > 1 (neste caso seria por causa do 3) então ele executaria o comando, e se todos os valores na coluna 2 fossem 1, então não faria nada.

Alguém pode me ajudar a conseguir isso?

    
por DM-007 20.11.2015 / 05:08

4 respostas

1

awk -F, 'NR>1 && $2 > 1 {found=1 ; exit} ; END {exit !found}' file.csv && mycommand

Isso sai com 0 (true) se qualquer campo 2 for > 1. Caso contrário, sai com 1 (falso). mycommand é executado se verdadeiro.

O NR>1 ignora o cabeçalho Item,Quantity (a string "Quantidade" é avaliada como > 1).

    
por 20.11.2015 / 05:23
1

Verifique as colunas com awk e saia com algum número, se elas corresponderem aos critérios. Em seguida, teste o código de saída com $? e execute seu (s) comando (s).

awk -F ',' '$2>1{exit 42}' file
[[ "$?" -eq 42 ]] && echo yes || echo no
    
por 20.11.2015 / 05:25
0
#!/bin/bash

if [[ $(cut -d, -f2 file.txt | grep '[0-9]' | sort -nr | head -1) -gt 1 ]]; then
  echo 'a number in the 2nd column is greater than 1.'
else
  echo 'i am doing nothing.'
fi
    
por 20.11.2015 / 07:52
-1

Isso deve ser feito:

if grep -qE ',([2-9]|[1-9][0-9])' file
then
    echo execute your command
fi
    
por 20.11.2015 / 06:32