Ich habe eine Datei, die eine einzelne Spalte von ganzen Zahlen enthält. Ich möchte aus dieser Datei die Liste aller zusammenhängenden Teilfolgen (dh Teilfolgen, die in aufeinanderfolgender Reihenfolge auftreten) extrahieren, die zweimal hintereinander mit der gleichen Nummer beginnen und eine Länge von 12 ganzen Zahlen haben (einschließlich überlappender Teilfolgen).
Darüber hinaus sollten alle nicht ganzzahligen Zeilen in der Datei ignoriert / entfernt werden. Wenn eine Sequenz das Ende der Eingabe erreicht, bevor 12 Ganzzahlen erreicht sind, sollte die verkürzte Sequenz weiterhin ausgegeben werden.
Angenommen, meine Eingabedatei enthält die folgenden Daten:
1
junk
1
1
2
3
4
4
5
6
7
8
9
10
11
12
13
14
15
15
16
Dann sollte die Lösung die folgende Ausgabe erzeugen:
1 1 1 2 3 4 4 5 6 7 8 9
1 1 2 3 4 4 5 6 7 8 9 10
4 4 5 6 7 8 9 10 11 12 13 14
15 15 16
Beachten Sie, dass die junk
Zeile und die leere Zeile ignoriert werden, sodass die ersten drei 1
Zeilen als zusammenhängend behandelt werden.
1,2
oder5,6
. Ich würde sagen, dass Sie die gleiche Zahl zweimal an zwei aufeinanderfolgenden Stellen finden möchten.Antworten:
Hier ist ein Python-Skript, das macht, was Sie wollen:
Angenommen, Ihre Daten befinden sich in einer Datei mit dem Namen
data.txt
. Dann könnten Sie dieses Skript wie folgt ausführen:Angenommen, Ihre Eingabedatei
data.txt
sieht folgendermaßen aus:Dann würde Ihre Ausgabe so aussehen:
Verwenden Sie die Ausgabeumleitung, um die Ausgabe in einer Datei zu speichern:
quelle
AWK
Ansatz:Berücksichtigt man nur zuerst 2 identische aufeinanderfolgende Zahlen, so ist dies für mehrere Extraktionen geeignet, ohne jedoch die Bedingung zu berücksichtigen, dass 2 identische aufeinanderfolgende Zahlen innerhalb der folgenden 10-Nummern-Sequenz unter dem verarbeiteten Slice liegen können.
quelle
Erste Variante - O (n)
Zweite Variante - O (n * n)
Ausgabe
quelle
awk -f file
method verwenden, sollten Sieawk '
vom Anfang und' input.txt
vom Ende des Skripts entfernen . Und es durch diese Art und Weise auszuführen:awk -f script.awk input.txt
. Sie können auch einfach alle Befehle (awk
Skripte) in das Terminal kopieren und drückenEnter
.bash
Skript (benanntmy_program.sh
, zum Beispiel), dann macht es ausführbar durch diechmod u+x my_program.sh
und durch den Lauf./my_program.sh
. Vergessen Sie nicht denbash
Schebang -#!/bin/bash
am Anfang dermy_program.sh
Akte.