Ich versuche, die Anzahl der Zeilen nach einer problematischen Zeile in einer CSV-Datei zu zählen. Ich bin mir bewusst, dass ich die grep -a #
Syntax verwenden kann, um die Anzahl der Zeilen auszugeben, nachdem eine Übereinstimmung gefunden wurde. Mich interessiert nur die tatsächliche Anzahl der Leitungen. Mir ist klar, dass ich die Zahl auf MAX_INT setzen, in eine Datei umleiten und etwas mehr verarbeiten könnte.
Ich bin auf der Suche nach einem prägnanten Einzeiler, der mir nur die Zählung angibt.
Irgendwelche Vorschläge?
grep -m1 match >/dev/null
natürlich mit löschen . Und Ihr zweites Problem ist eine GNUsed
- sie setzt ihren Eingangsoffset nicht gemäß Spezifikation zurück. Sie müssen-u
w / GNU verwenden - was nicht immer wünschenswert ist. Ich hätte klarer sein können, aber meine Annahme war, dass eine GNUgrep
und eine GNUsed
paarweise kommen würden. Ich denke,grep -qm1
könnte auch funktionieren, um die/dev/null
Weiterleitung zu verkürzen - aber GNUgrep
macht seltsame Dinge,-q
und ich kann mich nicht erinnern, wie diese beiden zusammenarbeiten.wc -l
ist ein bisschen billiger alsgrep -c ''
.Hier ist ein Weg.
quelle
Ein anderer Weg - Verwendung von
dc
ist ein wenig esoterisch, scheint aber hier gut zu funktionieren:sed
Suchtprob.txt
nach "Problem" und der letzten Zeile und gibt mit dem=
Befehl die Zeilennummer von beiden aus.dc
Liest diese beiden Werte auf den Stapel, kehrt sie um, subtrahiert und druckt die Differenz.quelle
Ganz mit sed (wenn auch zwei Kommandos mit einer Pipe)
Löscht alle Zeilen vor der Zeile und zählt dann mit dem nächsten Befehl die Zeilen in der neuen Datei.
quelle
Dies sollte alle Zeilen bis (und einschließlich) der problematischen Zeile löschen und dann die verbleibenden Zeilen zählen:
quelle