모든 .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이름이 where 로 끝나는 모든 비어 있지 않은 일반 파일의 경우, 여기서는 "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

관련 정보