Перечислить все файлы .txt и подсчитать количество столбцов

Перечислить все файлы .txt и подсчитать количество столбцов

Как вывести список всех .txt-файлов (файлы, разделенные символом вертикальной черты) и количество столбцов каждого файла в каталоге?

решение1

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

Напечатал бы что-то вроде

./dir/foo.txt: 2

для каждого обычного непустого файла, имя которого заканчивается на , .txtгде "2"- количество |полей, разделенных -, в первой строке файла.

Обратите внимание, что nextfileэто доступно не во всех awkреализациях, но там, где это не так, это должно быть безвредно (просто менее эффективно, так как awk будет считывать файлы полностью).

Если вы хотите рассмотреть только те файлы, которые имеют одинаковое количество столбцов во всех своих непустых строках, с помощью GNU 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}' {} +

решение2

Другой подход для любогоawkвыполнение:

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

  • -F'|'- рассматривать |как разделитель полей
  • NF{ ... }- гарантирует, что в файле есть хотя бы одно поле/столбец. NFСам по себе указывает на количество столбцов

решение3

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

решение4

Ваш вопрос не очень ясен, но вы можете попробовать эту команду: find DIRECTORY -name "*.txt" | xargs awk -F "SEPARATOR" "{print FILENAME, NF }" просто замените DIRECTORYи SEPARATORна ваш каталог и разделитель столбцов.

Связанный контент