2016-11-17 1 views
3

Zum Beispiel, wenn ich diese Zeile in einer input.txtWie die erste Nummer nach einer Zeichenkette in bash bekommen

Namen genannt Datei: Tom

Alter: 12

Name: Bob

Alter: 13

Name: Jim

Alter: 14

Name: Joe

Alter: 15

Ich möchte die erste Zahl nach Jim, der 14. Dank ist :)

+1

Verwirrt über dem Eingang ... für Nummer gefragt ursprüngliche Frage nach der „Gewicht“, in der alle Werte auf Einzel waren ... das jetzt „Name hat sich geändert "und" altern "über mehrere Zeilen hinweg. – Adam

+1

@Phoebe, Bei jeder Änderung ist die Struktur der Datei, die Sie posten, sehr unterschiedlich. Was möchten Sie tun? – Rashmirathi

+2

OK, jetzt auf Eingabe ... Die Ausgabe, die Sie erwarten ... nur 14 ... oder alle Altersgruppen 12, 13, 14, 15 ... Warum ist Jim besonders? – Adam

Antwort

2

Es gibt mehrere Lösungen für dieses, mit Werkzeugen einschließlich sed, awk , usw. Ich bevorzuge jedoch perl.

perl -0777 -nle 'print "$1\n" if /^name:\s*Jim\s*\nage:\s*([\d+.]+)/gm' file.txt 

Erläuterung:

  • ([\d.]+) eine beliebige Anzahl nach dem Alter: in der nächsten Zeile nach Jim.

  • -0777 ist der Perl-Slurp-Modus, der in Kombination mit/m für die Mehrlinien-Anpassung verwendet wird.

+0

Ich habe es versucht, aber nichts gedruckt :( – Phoebe

+0

@Phoebe Adams Lösung funktioniert für mich – Rashmirathi

+0

Ich habe gerade meine Frage bearbeitet, um es klarer zu machen, danke: D – Phoebe

2

Eine Lösung grep mit:

cat file.txt | grep -A2 'Jim' | grep -Eo '[0-9]*' 
+0

Vielen Dank, aber ich erkannte meine Frage ist nicht klar genug, also habe ich es bearbeitet :) – Phoebe

+0

@Phoebe Ich habe meine Antwort bearbeitet. – badjr

Verwandte Themen