모든 .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

모든 것에 대한 또 다른 접근 방식구현:

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 }" 바꾸면 됩니다 .DIRECTORYSEPARATOR

관련 정보