Frage Custom GREP mit Sternchen und Ankern?


Ich habe viele EDI-Dateien (die ziemlich eine einzelne Zeile von Kauderwelsch-Text sind), die ungefähr 300mb / pcs sind.

Ich suche nach passenden Mustern:

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

Was ich weiß ist, dass UP an der Spitze von jedem ist Sektion gefolgt von der sku am Ende ist QTY mit dem Menge #.

Was ich versuche zu finden, ist Artikelnummer: 605284466346 mit einem Menge: 17

Das war mein tapferer Versuch:

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


4
2018-05-04 17:30


Ursprung




Antworten:


awk ist viel besser dafür:

#!/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)

Ich denke, es ist ziemlich selbsterklärend, und Sie können sich für beliebige Sku- und Qty-Werte anpassen. Aber fühlen Sie sich frei, irgendeine Frage zu stellen, die Sie darüber wollen!

Es wird in dem Gegebenen rekurrieren DIR, und Sie können es leicht anpassen, um andere Dateien zu scannen *.edi


4
2018-05-04 17:49



Wenn das für ehime funktioniert, werde ich das erhöhen, wenn ich mehr Stimmen habe. - belacqua
Es hat nicht funktioniert, ich bin mir nicht sicher, ob es Dateien durchsucht oder nicht? Oben war ein Testfall, also sollte 605284466346 17 haben, aber ich habe keine Rückkehr von der Suche mit * .edi? - ehime
ok, aber wie ich schon sagte, es ist eine einzelne 300mb Linie, die ich versuchen werde und einen Brocken obwohl - ehime
pastebin.com/HY4mc4Dq @MetreLion nein es gibt mehrere *UP* Segmente, aber die gesamte Datei ist eine durchgehende Linie, schauen Sie sich die Pastebin und Sie sollten eine bessere Idee bekommen - ehime
Lass uns setze diese Diskussion im Chat fort - ehime