Zählen Sie die Anzahl der Zeilen in jeder Spalte einer Textdatei

Zählen Sie die Anzahl der Zeilen in jeder Spalte einer Textdatei

Ich habe eine Textdatei mit folgendem Format:

5 3 1
2 3 4
.....
.....
also 3 durch Leerzeichen getrennte Zahlenspalten/ Einige der Zeilen könnten jedoch wie folgt aussehen:
2
3 1
Ich möchte also feststellen, ob die Textdatei solche Inkonsistenzen aufweist und sie ausdrucken. Wie mache ich das?

Antwort1

Stephane Chazelas hat vorgeschlagen

awk 'NF != 3'

Dies ist eine einfache Möglichkeit, alle Zeilen auszudrucken, die nicht genau drei Spalten haben. Wenn Sie möchten, dass der Befehl auch einen Fehlerstatus zurückgibt, wenn eine solche Zeile gefunden wird:

awk 'NF != 3 {print; ++bad} END {exit(!!bad)}'

Entfernen Sie print;, um nichts zu drucken und das Vorhandensein solcher Zeilen nur über den Beendigungsstatus zu melden.

Sie können dies auch mit grep tun:

grep -Ev '^[^ ]+ +[^ ]+ +[^ ]+$'

Wenn Sie strenger sein und alle Zeilen drucken möchten, die nicht aus genau drei Spalten bestehen, von denen jede eine Ganzzahl enthält:

grep -Ev '^([0-9]+) +([0-9]+) +([0-9]+)$'

Verwenden Sie [␉ ]+anstelle von  +, wobei ein Tabulatorzeichen ist, wenn Sie einen oder mehrere Tabulatoren als Spaltentrennzeichen zulassen möchten. Verwenden Sie , (␉| +)um entweder genau einen Tabulator oder eine Folge von Leerzeichen zuzulassen.

Antwort2

Falls Sie wirklich wissen möchten, was im Titel Ihrer Frage steht, awkdruckt dieser Befehl die Zeilennummer und die Anzahl der Felder in jeder Zeile:

awk '{print NR,NF}'

Antwort3

awk '{if(NF != 3) print NR,NF}' file.txt

Dadurch werden die Zeilennummern in der Datei ausgedruckt, die keine 3 Felder haben, und die Anzahl der Felder, die sie haben.

verwandte Informationen