2017-03-12 2 views
-3

Ich habe eine Datei mit Definitionen ähnlich wie diese:Suche Nummer in der Datei fehlt

some code 
some more code 
var 1=foo 
var 2=bar // next line is missing 
var 4=one // continuing with 4 
var 5=or 
var 6=multiple 
var 7=lines 
var 8=are 
var 9=missing 
var 10=! 
bla 

Ich versuche, die Linie, die ich versehentlich gelöscht zu finden. Leider ist meine Datei nicht 10 Zeilen groß, sondern 10000 Zeilen.

Ich hatte die Idee von grepping für jede einzelne Nummer und echo die Nummer aus, wenn es kein Ergebnis gab, aber da meine einstelligen Zahlen keine "0" als Präfix haben, wird es die 10 finden und so weiter .

Ich würde eine bash/awk/perl oder vim Lösung bevorzugen.

+2

Und ... was hast du probiert? StackOverflow ist kein Code-Schreibdienst, in dem Sie Anforderungen veröffentlichen und jemand eine Lösung erstellt. –

+0

@DavidMakogon Ich habe eines der Dinge hinzugefügt, an die ich in der Frage gedacht habe. Ich bin hier ziemlich verloren, sonst würde ich nicht fragen. Das kann ich nicht erreichen und brauche es für ein gemeinnütziges Projekt. –

+0

Ich verstehe - es ist wichtig für Sie. Aber es spielt keine Rolle, dass es sich um ein gemeinnütziges Projekt handelt - Sie schreiben etwas und bitten jemanden, etwas für Sie zu schreiben. Dies gilt nicht für StackOverflow. –

Antwort

0

Sie geschrieben Abtastwerteingang und was Sie bisher versucht haben (grep für einzelne Zahlen), alles, was Sie wirklich aus Ihrer Frage fehlt, ist die erwartete Ausgabe so mit diesem beginnen und Massage zu entsprechen:

$ awk -F'[ =]' -v OFS=':' '$1!="var"{next} $2!=(p+1){print NR, $0} {p=$2}' file 
5:var 4=one // continuing with 4 
+1

Danke für deine Antwort :) awk magie ich verstehe natürlich nicht .. Aber es funktioniert! –

+1

Gern geschehen. Awk ist extrem einfach, weil es eine sehr minimale C-ähnliche Sprache hat. Nur um Text zu manipulieren, müssen Sie nur ein paar Grundlagen verstehen, damit alles zusammenpasst. Holen Sie sich das Buch Effective Awk Programming, 4. Auflage, von Arnold Robbins. –

+0

Die Beispieleingabe ist sortiert. Wenn die reale Eingabe nicht sortiert ist, "sort -n" vor der Verwendung der "awk". –