So suchen Sie ab der zweiten Spalte nach einer Zeichenfolge

So suchen Sie ab der zweiten Spalte nach einer Zeichenfolge

Ich habe eine Datei, die durch Kommas getrennte Zeichenfolgen enthält. Die Zeichenfolgen können Punkte enthalten (also nicht nur alphanumerische Zeichen). Dies ist ein Beispiel:

site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
siteLevel1.2,Levelv2
Level1.2,Levelv2

Ich muss nach den Site-Namen suchen (bitte beachten Sie, dass ich kein bestimmtes Format für Site-Namen habe, d. h. sie enden nicht immer mit .com, sodass ich nicht darauf achten muss, wie die erste Spalte aussieht).

Ich brauche die Seiten, dieNURenthält eine bestimmte Zeichenfolge. In diesem BeispielLevel1.2 ausschließlich(ohne Level1.1 oder Level1.0 nicht Level3entweder vorher oder nachher). Drucken Sie dann das Ergebnis in eine neue Datei, die der Bedingung entspricht (enthält nur Level1.2). Die Suchbegriffe beginnen also in der zweiten Spalte (ich möchte kein Suchergebnis, das ein übereinstimmendes Muster im Site-Namen findet).

Wenn ich also nach Level1.2 suche, sollte die neue Datei Folgendes enthalten:

site1.com,Level1.2
site3.com,Level1.2

Aber mein Befehl führt zu:

site1.com,Level1.2
site3.com,Level1.2
siteLevel1.2,Levelv2
Level1.2,Levelv2

Wenn es eine Site gibt, deren Name Level1.2 enthält, sollte sie nicht gezählt werden, da für mich die erste Spalte irrelevant ist.

Ich habe diesen Befehl ausprobiert und er funktioniert bei mir. Das einzige Problem ist, dass die Suche das Vorkommen der Suchzeichenfolge in der ersten Spalte ignorieren muss.

awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt

Antwort1

Sie können Folgendes versuchen awk:

awk -F, '$2=="Level1.2" && NF==2' myfile.txt

Das Eingabetrennzeichen ist auf eingestellt ,. Der Befehl druckt Zeilen mit 2 Feldern, wobei das zweite die passende Zeichenfolge enthält.

Antwort2

Folgende Werke:

grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'

Dadurch wird das erste Feld und das nachfolgende Komma übersprungen und dann nach einer Übereinstimmung mit gesucht. Level1.2Das Ergebnis wird dann gefiltert, indem alle Datensätze mit einem nachfolgenden ignoriert werden Level( Levelkeine Datensätze im ersten Feld haben ein vorangestelltes Komma).

Ich bin davon ausgegangen, dass anderer Text angehängt werden kann Level1.2, sofern er keinen String enthält Level. Wenn das nicht zutrifft, können Sie die einfachere Variante verwenden:

grep '^[^,]*,Level1\.2$' myfile.txt

verwandte Informationen