Кастом GREP со звездочками и якорями?

У меня есть много файлов EDI (которые в значительной степени представляют собой одну строку тарабарского текста), которые составляют около 300 МБ / шт.

Я ищу соответствие шаблону:

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

Что я знаю, так это то, что UP стоит во главе каждого раздела , за которым следует sku в хвостовой части - QTY с количеством # .

Я пытаюсь найти SKU: 605284466346 с КОЛ-ВО: 17

Это была моя доблестная попытка:

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

4
задан 4 May 2012 в 22:33

1 ответ

awk намного лучше для этого:

#!/bin/bash

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

sku=$1
qty=$2
dir=$3

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*"} $2==sku &&
    $NF==qty {print "found " FILENAME ": SKU=" sku ", QTY=" qty}' "$file"
done < <(find "$dir" -name "*.edi" -type f)

я думаю, что это в значительной степени очевидно, и можно адаптироваться к любому sku и значениям количества, которые Вы хотите. Но не стесняйтесь задавать любой вопрос, который Вы хотите об этом!

Это рекурсивно вызовет в, учитывая DIR, и можно легко адаптировать его для сканирования других файлов, кроме того *.edi

4
ответ дан 4 May 2012 в 22:33

Другие вопросы по тегам:

Похожие вопросы: