각 파일의 열 수와 함께 디렉토리의 모든 .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 }"
십시오 .DIRECTORY
SEPARATOR