Shell Script para procurar todas as linhas em um arquivo com '500' na coluna 11 demorando muito para ser executado

1

Eu escrevi o seguinte script como prática:

#!/bin/bash

MyFile=$1

while read p; do

error=$(echo $p | awk '{print $11}')

        if [ "$error" = "500" ]
        then
                echo $p
        fi

done < $MyFile

O problema é que o script é executado lentamente, levando horas para concluir, minha configuração:

  • Ubuntu no Windows 10 (64 com Intel i7 6400 2.80GHz e 8G Ram).

Existe algum problema com minha configuração ou com a lógica do script? Obrigado,

    
por Omar BISTAMI 30.01.2018 / 09:40

1 resposta

2

Usar $( executa um subshell, assim como o pipe | . É melhor fazer todo o trabalho em um shell ou em um idioma.

Por exemplo faz todo o trabalho no awk:

awk '($11==500){print}' "$1"

Ou sem descascar:

while read -a columns ; do
    [[ ${columns[10]} == 500 ]] && echo "${columns[@]}"
done < "$1"
    
por 30.01.2018 / 09:46