Nur übereinstimmende Zahlen in numerischer Reihenfolge

438
Geremia

Ich habe Nummern in [.], Die die Seitennummer eines ursprünglich gedruckten Dokuments angeben, das ich transkribiere. Das Dokument enthält jedoch auch andere Nummern in [.], Die nicht den Seitennummern entsprechen.

Zum Beispiel:

Lorem ipsum dolor sitzt amet, consectetur adipiscing elit. Donec ein Diam Lectus. Sed sitzen amet ipsum mauris. Wichtige Informationen für Frauen und Männer, die über den Erhalt eines Hendrerits verfügen. Donec und Mollis Dolor. Praesent et diam eget libero egestas mattis sitzt unter dem vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ist ein Non-Tortor. Lorem ipsum dolor sitzen amet, consectetur adipiscing [267]elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar und semper sed, der den id dolor begünstigt. Pellentesque auctor nisi id magna follat ​​sagittis. Curabitur dapibus enim sitzen elf pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros. Don viverra mi quis quam pulvinar bei malesuada arcu rhoncus. Cum Sociis natoque penatibus und magnis disurures montes, nascetur ridiculus mus. In Rutrum Accumsan Ultricies. Mauris vitae nisi at sem facilisis semper ac in est.

Vivamus fermentum semper porta. Nunc Diam Velit, der auch Tristique Vitae verwendet, sagittis vel odio. Maecenas convallis ullamcorper ultricies. Curabitur ornare, ligula semper consectetur sagittis, nissi diam iaculis velit, id [1] fringilla sem nunc vel mi. Nam Dictum, Odio Nec Pretium Volutpat, Arcusat Placerat Erat, Nicht tristique Elit Urna und Turpis. Quisque mi metus, ornare sitzen amet fermentum und tincidunt et orci. Fusce eget orci orgue congue vestibulum. Ut dolor diam, elementum und vestibulum eu, portititor vel elit. Curabitur venenatis pulvinar tellus gravida ornare. Sed et erat faucibus nunc euismod ultricies ut id justo. Nullam cursus suscipit nisi und ultrices justo sodales ang Fusce venenatis facilisis lectus ac semper. Aliquam bei massa ipsum. Quisque bibendum purus[2] convallis nulla ultrices ultricies. Nullam aliquam, mi eu aliquam tincidunt, purus velit laoreet tortor und viverra pretium nisi quam vitae mi. Fusce vel volutpat elit. Nam sagittis nisi dui.

Suspendisse lectus leo, consectetur in tempor sitzen amet, placerat quis neque. Etiam luctus porttitor [1] lorem, sed suscipit est rutrum non. Curabitur lobortis nisl en en congue semper. Aenean Commodo ultrices imperdiet. [3]Vestibulum uto sapien venenatis tincidunt. Phasellus Eget Dolor sitzen amet ipsum dapibus condimentum vitae quis lectus. Aliquam ut massa in turpis dapibus convallis. Elite lacus, vestibulum bei malesuada et, ornare et est. Ut Auguste Nunc, Sodales ut euismod non, anregende Vitae orci. Mauris ut placerat justo. Mauris in ultricies enim. Quisque nec est eleifend nulla ultrices egestas quis ut quam. Donec sollicitudin lectus a mauris pulvinar id aliquam urna cursus. Cras quis ligula sem, vel elementum mi. Phasellus non ullamcorper urna. [24]

Klasse Aptent Taciti Sociosqu Ad Litora pro Conubia nostra pro inceptos himenaeos. In Euismod Ultrices Facilisis. Vestibulum porta sapien adipiscing augue id pretium lectus belästigung. Proin quis dictum nisl. Morbi id quam sapien, sed vestibulum sem. Duis elementum rutrum mauris sed convallis. Proin vestibulum magna mi. Aenean tristique hendrerit magna, [5] ac facilisis nulla hendrerit ut. Sed non tortor sodales quam auctor elementum. Donec hendrerit nunc elg el pharetra pulvinar. Suspendisse Id Tempus Tortor. Aenean Luctus, Elit Commodo Laoreet Commodo, Justo Nisi Consekat Massa, sed Vulquate Quam Urna Quis Eros. Donec vel.

Ich möchte alle, um sequentiell ersetzen [.], Die sind die Seitenzahlen mit, in TeX, \marginpar{[.]}aber keine Zahlen ignorieren, die nicht in der Reihenfolge sind.

So würde Ich mag sedoder emacsoder ein anderes ähnliches Programm zu entsprechen, für das obige Beispiel, was ich hier fett gemacht habe:

[267] [1] [2] [1] [3] [24] [5]

Daher möchte ich nur das, was in numerischer Reihenfolge ist, zusammenbringen.

Wie kann ich das machen?

1
Zur Klarstellung kommt "[24]" in numerischer Reihenfolge nach "[3]", aber es ist nicht beabsichtigt, "[24]" zu finden, sondern "[5]", was auch nach "[3]" und ist auch nicht gleich nach [3] `? Was wäre der erträgliche Unterschied für ein Spiel? Wenn eine Differenz von 2 in Ordnung ist, ist eine Differenz von 3 auch in Ordnung? Simon vor 10 Jahren 1
@Simon: Jeder Unterschied ≥2 muss zurückgewiesen werden, obwohl es schön wäre, einen solchen Schwellenwert auch explizit angeben zu können. Geremia vor 10 Jahren 0
Ich denke, awk könnte tun, was ich suche. Geremia vor 10 Jahren 0

1 Antwort auf die Frage

2
Simon

awkkann das sicherlich tun. Zum Beispiel das Skript subpar.awk:

BEGIN {  maxgap = ARGV[1] ARGV[1] = "-" count = 0  }  { i = count + 1 while (i <= count+maxgap) { n = sub("\\[" i "\\]","\\marginpar{[" i++ "]}") count += n } print } 

... könnte den Beispieltext als verarbeiten awk -f subpar.awk 2 <lorem.txt, wobei der Parameter 2die maximal zulässige Differenz in der Sequenz ist. sub()gibt die Anzahl der durchgeführten Ersetzungen zurück (entweder 0 oder 1), countwird also nur erhöht, wenn eine Ersetzung in der Zeile vorgenommen wurde. Dieser Code behandelt den Fall, in dem in einer Zeile mehr als eine Ersetzung vorgenommen werden muss.

Die einzige Sache ist, dass ich Maxgap aus irgendeinem Grund sehr groß machen muss… Geremia vor 10 Jahren 0
Für den Testfall war maxgap = '2' ausreichend. Der einzige Grund, es viel größer zu machen, wäre, wenn es eine viel größere Lücke in der Sequenz gibt, was im Kontext unwahrscheinlich erscheint. Wie groß mussten Sie es machen und wie war die Reihenfolge der Zahlen in Klammern? Simon vor 10 Jahren 0
Ich lief genau `awk -f subpar.awk 2 Geremia vor 10 Jahren 0
Ich würde vorschlagen, den folgenden Code in eine Zeile nach 'while (i <= count + maxgap) {': `print" Searching for ["i"] "` einzufügen, die Ihnen genau sagen soll, nach welcher Seitennummer das Skript sucht für jeden Moment. Dann können Sie den gesuchten Text vergleichen (aber nicht finden) mit dem erwarteten Text im folgenden Absatz vergleichen und feststellen, ob es Unterschiede gibt. Simon vor 10 Jahren 0