Listen Sie alle TXT-Dateien auf und zählen Sie die Anzahl der Spalten

Listen Sie alle TXT-Dateien auf und zählen Sie die Anzahl der Spalten

Wie liste ich alle TXT-Dateien (durch Pipes getrennte Dateien) und die Anzahl der Spalten jeder Datei in einem Verzeichnis auf?

Antwort1

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  FNR == 1 {print FILENAME ": " NF; nextfile}' {} +

Würde so etwas drucken wie

./dir/foo.txt: 2

für jede reguläre, nicht leere Datei, deren Name mit endet, .txtwobei "2"die Anzahl der |durch - getrennten Felder in der ersten Zeile der Datei ist.

Beachten Sie, dass dies nextfilenicht in allen Implementierungen verfügbar ist awk. In den Implementierungen, in denen dies nicht der Fall ist, sollte es jedoch harmlos sein (nur weniger effizient, da awk die Dateien vollständig gelesen würden).

Wenn Sie nur die Dateien berücksichtigen möchten, die in allen nicht leeren Zeilen die gleiche Anzahl Spalten aufweisen, geben Sie mit GNU Folgendes ein awk:

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  BEGINFILE {n = 0}
  NF {
    if (n && NF != n) {
      print "skipping "FILENAME" ("NF" != "n")" > "/dev/stderr"
      n = 0; nextfile
    }
    n = NF
  }
  ENDFILE {if (n) print FILENAME ": " n}' {} +

Antwort2

Ein anderer Ansatz für alleawkImplementierung:

find . -type f -name "*.txt" -exec awk -F'|' 'NF{ print FILENAME,NF; exit }' {} \;

  • -F'|'|- als Feldtrennzeichen behandeln
  • NF{ ... }- stellt sicher, dass die Datei mindestens ein Feld/eine Spalte enthält. NFselbst zeigt auf die Anzahl der Spalten

Antwort3

find . -name "*.txt" -type f -exec wc -l {} \;

Antwort4

Ihre Frage ist nicht ganz klar, aber Sie können diesen Befehl versuchen: find DIRECTORY -name "*.txt" | xargs awk -F "SEPARATOR" "{print FILENAME, NF }" Ersetzen Sie einfach DIRECTORYund SEPARATORdurch Ihr Verzeichnis und Spaltentrennzeichen.

verwandte Informationen