У меня есть много файлов 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
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