Wie findet man 5 aufeinanderfolgende „0“ in einer Datei?

Wie findet man 5 aufeinanderfolgende „0“ in einer Datei?

Ich habe folgende Daten in einer Textdatei:

Name,7/27,7/28,7/29,7/30,7/31,8/1,8/2,8/3,8/4
abc,5,3,8,8,0,0,2,0,11
def,6,7,0,0,0,0,0,2,5
ghi,1,3,5,2,0,0,5,3,6

Ich muss herausfinden, welche Datei (die Spalte „Name“ ist der Dateiname) 5 aufeinanderfolgende Ergebnisse 0als Ausgabe liefert. In diesem Beispiel wäre das def.

Antwort1

Ich würde dies wahrscheinlich in tun und als Trennzeichen Folgendes awkverwenden :,

$ awk -F, '/,0,0,0,0,0/{print $1}' file 
def

Allerdings wird auch eine Zeile wie diese angezeigt:

mno,6,7,0,0,0,0,0.5

Um dies zu vermeiden, führen Sie eine Übereinstimmung nur durch, wenn auf das Letzte ein oder das Zeilenende 0folgt :,

awk -F, '/,0,0,0,0,0(,|$)/{print $1}' file 

Antwort2

grep '0,0,0,0,0' file.txt

druckt die passende Zeile:def,6,7,0,0,0,0,0,2,5

grep '0,0,0,0,0' file.txt | cut -d, -f1

druckt das erste Feld mit folgendem Zeichen ,als Trennzeichen:def

Antwort3

Um die gewünschte Ausgabe zu erhalten, können wir die folgenden Befehle ausprobieren.

Gnu sed

$ sed -nE 'G;y/,/\n/;/(\n0){5}\n/P' file

$ awk -F, '/(,0){5}(,|$)/ && $0 =$1""' file

$ grep -oP '^[^,]+(?=.*?(,0){5}(,|$))' file 

Bei Grep mit aktiviertem PC-Re-Modus suchen wir ,0in einem Lookahead nach den fünf aufeinanderfolgenden Ergebnissen, damit diese nicht in die Ausgabedatei von Grep aufgenommen werden.

Antwort4

Sed kann dies tun:

sed -n '/,0,0,0,0,0[,$]/p' file.txt | sed 's/,.*//'

verwandte Informationen