Zum Beispiel möchten wir alle quote ( "
) Zeichen zählen; Wir machen uns nur Sorgen, wenn Dateien mehr Anführungszeichen haben, als sie sollten.
Beispielsweise:
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"
erwartete Ergebnisse:
16
text-processing
Yael
quelle
quelle
Antworten:
Sie können
tr
Zeichen kombinieren (übersetzen oder löschen) mitwc
(Wörter, Zeilen, Zeichen zählen):(
-d
Geben Sie alle Zeichen in derc
Reihenfolge von ein"
und zählenc
Sie dann die Zeichen.)quelle
grep Ansatz:
-o
- Nur übereinstimmende Teilzeichenfolgen ausgebenOder mit einem Blick :
RS=''
- leeres Datensatztrennzeichen (anstelle von Zeilenumbruch)FPAT='"'
- Muster, das den Feldwert definiertquelle
-o
ist eine nicht standardmäßige GNU-Erweiterung des Standarddienstprogrammsgrep
. Es wird in der POSIX-Dokumentation fürgrep
nicht erwähnt .Wenn zwei Zeilen in der Datei eine ungerade Anzahl von doppelten Anführungszeichen enthalten, ist die Gesamtsumme der doppelten Anführungszeichen gerade und Sie erkennen keine unausgeglichenen Anführungszeichen (dies ist das, was Sie vermutlich tatsächlich tun möchten, aber ich könnte mich irren ).
Dieses
awk
Skript meldet jede Zeile in der Eingabezeile, die eine ungerade Anzahl von Anführungszeichen enthält:Wir setzten die Feldtrennzeichen (
FS
) , um"
mit-F'"'
was bedeutet , dass , wenn eine Linie eine gerade Anzahl von Feldern hat sie ungeradee Anführungszeichen hat.NF
ist die Anzahl der Felder im letzten Datensatz undNR
die Ordnungszahl des aktuellen Datensatzes ("die Zeilennummer").Angesichts der folgenden Eingabe:
wir bekommen
Etwas wie
würde "14" für diese Datei zurückgeben.
quelle
Ein weiterer
gawk
Ansatz:quelle
Pure BASH:
quelle
tmp
ein Array? Wenn ja,tmp
ist eine Reihe von was?tmp
In diesem Snippet befindet sich eine normale Shell-Variable. Und ich stimme dieser Antwort zu, weil dies zählt, wie oft ein Zeichen in einer Variablen (var
) und nicht in einer Datei erscheint, wie in der Frage angegeben.Versuchen:
Dies funktioniert jedoch nicht, wenn sich zwei oder mehr Zeichen in derselben Zeile befinden. Sie werden als ein Zeichen gezählt
quelle
grep -oF '"' Datei | wc -l
-F steht für feste Zeichenfolge
quelle
-F
Flagge hinzugefügt haben , die hier nicht benötigt wird.Exzentrische Doppel- GNU-
grep
Methode:quelle