In Bezug auf den folgenden Befehl habe ich versucht, durch Leerzeichen getrennten Inhalt einer Protokolldatei in ein Array (arr) einzufügen, dann eine Bedingung zum Suchen und Extrahieren einer bestimmten Zeichenfolge heraus. Das Problem ist, dass die Zeichenkette durch einfache Anführungszeichen umgeben ist, und ich weiß nicht, was die richtige Syntax ist diese Zitate in Bedingungsanweisung einzubeziehen:Linux/Bash Wenn Bedingung gleich einem String ist, der ein einzelnes Zitat enthält
cat file.log | nawk '{split($0,arr," "); for (i=1;i<=NF;i++) if (arr[i]=='serviceid') printf ("%s,%s\n",arr[i],arr[i+1])}'
Ich habe versucht diese:
cat file.log | nawk '{split($0,arr," "); for (i=1;i<=NF;i++) if (arr[i]=="'serviceid'") printf ("%s,%s\n",arr[i],arr[i+1])}'
cat file.log | nawk '{split($0,arr," "); for (i=1;i<=NF;i++) if (arr[i]=="\'serviceid\'") printf ("%s,%s\n",arr[i],arr[i+1])}'
Ich habe auch versucht, basierend auf einzelnen Zitat wie split($0,arr,/\'/)
zu teilen, aber es schlägt auch fehl.
Log
Dies ist ein Teil des Stammes: 'serviceid': 1002,
ist der Teil ich versuche zu navigieren. Wenn ich print arr[301]
ausführe, gibt es 'serviceid':
zurück. Aber wenn ich für (i = 1; i < = NF; i ++) befehle, wenn (arr [i] == 'serviceid',) {print $ i} Ich bekomme Syntaxfehler um einfache Anführungszeichen.
'originTransactionID': '00720170311', 'serviceFeeExpiryDate': datetime.datetime(2019, 12, 23, 12, 0, tzinfo=), 'accountFlagsBefore': {'activationStatusFlag': True, 'supervisionPeriodExpiryFlag': False, 'supervisionPeriodWarningActiveFlag': False, 'negativeBarringStatusFlag': False, 'serviceFeePeriodExpiryFlag': False, 'serviceFeePeriodWarningActiveFlag': False}, 'serviceid': 1002, 'supervisionExpiryDate': datetime.datetime(2019, 12, 23, 12, 0, tzinfo=), 'dedicatedAccountInformation': [{'startDate': datetime.datetime(9999, 12, 31, 0, 0, tzinfo=), 'dedicatedAccountValue1': '0', 'dedicatedAccountID': 1
Es wäre schön, wenn Sie ein kurzes Beispiel der Protokolldatei enthalten sind, so können wir unseren Code testen. – sorontar
Ich legte das Protokoll unter. Danke, – aschkant
Verwenden Sie \ 047, wo Sie das Angebot möchten. Ordnen Sie das normalerweise einer Var in BEGIN zu und verwenden Sie dann das :) – grail