Ich habe die folgende Datei:awk Äquivalent für die Suche nach einem Muster
Schedule Name: Today
Schedule Type: Standard
Active: yes
Effective date: 01/24/2014 11:17:05
Client Encrypt: no
LC/CY/Custmr: EU NY Cindy
BU CA Victor
GU MI Bob
Include:
Schedule Name: Tomorrow
Schedule Type: Standard
Active: yes
Effective date: 01/26/2014 11:17:05
Client Encrypt: no
LC/CY/Custmr: MU LA Martha
EU CA Sam
Include:
Schedule Name: Yesterday
Schedule Type: Standard
Active: no
Effective date: 01/21/2014 11:17:05
Client Encrypt: no
LC/CY/Custmr: NV IL Joe
Include:
gewünschte Ausgabe
Cindy Today
Victor Today
Bob Today
Martha Tomorrow
Sam Tomorrow
Jetzt habe ich Schedule Name
also heute erhalten möchten, morgen zusammen mit Customer name
, die das vierte Feld ist wenn Active
yes
ist. So soll die Ausgabe sein:
cat billing |
awk '/Schedule Name/ || /Active:/ || /LC/,/^$/' |
grep -v '^$'
Eine leere Zeile nach LC ist vor einschließen, so versuche ich, mir alle Daten erhalten, bis Sie eine leere Zeile finden und dann grep -v Leerzeile, Es funktioniert gut, wenn ich versuche, ohne Schedule Name und Active, aber nicht mit diesen 2 Muster suchen.
Ich verwende unten Code, der ziemlich langsam ist.
for pol in `cat /tmp/Active_Policies`
do
count=`sudo /usr/openv/admin/pollist $pol -U | awk '/LC\/CY\/Custmr:/,/Include:/' | grep -v "Include:" | wc -l`
if [ $count -gt 0 ]
then
first=`sudo /usr/openv/admin/pollist $pol -U | awk '/LC\/CY\/Custmr:/,/Include:/' | grep -v "Include:" | awk '{print $4}' | head -1`
echo "$first $pol" >> /tmp/Policies_$(date +%m-%d-%Y)
counter=1
for client in `sudo /usr/openv/admin/pollist $pol -U | awk '/LC\/CY\/Custmr:/,/Include:/' | grep -v "Include:" | awk '{print $3}' | sed '1d;$d'`
do
((counter = counter + 1))
if [ $counter -le $count ]
then
echo "$client $pol" >> /tmp/Policies_$(date +%m-%d-%Y)
fi
done
fi
done