Custom GREP com asteriscos e âncoras?

4

Eu tenho muitos arquivos EDI (que é praticamente uma única linha de texto sem sentido) que são cerca de 300mb / pcs.

Estou procurando um padrão que combine com isso:

'*UP*605284466346 {lots of other stuff inbetween with set length} QTY*17'

O que eu sei é que a UP está à frente de todas as seções seguidas pelo sku no fim da cauda é QTY com o quantidade # .

O que estou tentando encontrar é SKU: 605284466346 com um QTY: 17

Esta foi a minha valente tentativa:

find * | grep -lir 'UP*605284466346.*QTY\*97' * | grep -v svn

    
por ehime 04.05.2012 / 19:30

1 resposta

4

awk é muito melhor para isso:

#!/bin/bash

# Usage findsku <SKU> <QTY> <DIR>
# Example: findsku 605284307892 14 ~/mydir
# Result: found ./teste.edi: SKU=605284307892, QTY=14

sku=
qty=
dir=

echo "looking for SKU #${sku} with QTY=${qty} in ${dir}:"

while read -r file; do
    awk -F'*' -v sku="$sku" -v qty="$qty" 'BEGIN{RS="*UP*"} ==sku &&
    $NF==qty {print "found " FILENAME ": SKU=" sku ", QTY=" qty}' "$file"
done < <(find "$dir" -name "*.edi" -type f)

Eu acho que é praticamente auto-explicativo, e você pode se adaptar a qualquer valor de sku e qty que desejar. Mas sinta-se livre para fazer qualquer pergunta que quiser sobre isso!

Ele irá reciclar no dado DIR , e você pode facilmente adaptá-lo para escanear outros arquivos além de *.edi

    
por MestreLion 04.05.2012 / 19:49

Tags