wc -l file.txt
줄 수와 파일 이름을 출력합니다.
파일 자체가 아닌 숫자 자체 만 있으면됩니다.
나는 이것을 할 수있다
wc -l file.txt | awk '{print $1}'
그러나 더 좋은 방법이 있습니까?
wc -l file.txt
줄 수와 파일 이름을 출력합니다.
파일 자체가 아닌 숫자 자체 만 있으면됩니다.
나는 이것을 할 수있다
wc -l file.txt | awk '{print $1}'
그러나 더 좋은 방법이 있습니까?
답변:
이 방법으로 시도하십시오 :
wc -l < file.txt
wc -l
하나를 방출해서는 안되며 ksh가 왜 프로그램의 표준 출력에 공백을 추가합니까?
4711 [stdin]
출력 과 같은 것을 기대할 것 입니다.
printf "%'d"
공간을 관리하고 많은 수를 멋지게 인쇄하는 와의 페어링을 고려하십시오 .
cat file.txt | wc -l
매뉴얼 페이지 에 따르면 (BSD 버전의 경우 확인할 GNU 버전이 없습니다).
파일을 지정하지 않으면 표준 입력이 사용되며 파일 이름이 표시되지 않습니다. 대부분의 환경에서 EOF 또는 [^ D]를 수신 할 때까지 프롬프트가 입력을 수락합니다.
wc -l < file.txt
같은 효과가 있습니다.
wc -l < file.txt
은 고양이의 쓸모없는 사용을 피하기 위해 사용 합니다. 그것이 눈에 띄는 시간을 소비한다고 생각한다면 당신은 완전히 미쳤지 만.
선행 공간 없이이 작업을 수행하려면 왜 안됩니까?
wc -l < file.txt | bc
wc -l < file.txt
를 수정하고 공간을 제거하는 데 사용하는 다른 답변과 이것을 결합 할 수 있습니다 .wc -l < file.txt | bc
어때요?
wc -l file.txt | cut -d' ' -f1
즉, 출력 wc
을 cut
(구분자가 공백이고 첫 번째 필드 만 선택)에 파이프
wc -l file.txt | awk '{print $1}'
OP가 시도한 것보다 낫지 않습니다 .
wc -l < file.txt
방법 보다 빠릅니다 . 그러나 명령이 선행 공간 (예 : "34068289 file.txt"대신 "34068289 file.txt")을 리턴하는 한 | cut -d' ' -f2
BSD에서 사용해야합니다 wc
.
에서 제공하는 선행 공백없이 문자 수를 얻으려고하는 비슷한 문제가 있어서이 wc
페이지로 연결되었습니다. 여기에 대한 답변을 시도한 후 다음은 Mac (BSD Bash)에서의 개인 테스트 결과입니다. 다시 말하지만 이것은 문자 수입니다. 줄 수를 위해 당신은 할 것 wc -l
입니다. echo -n
후행 줄 바꿈을 생략합니다.
FOO="bar"
echo -n "$FOO" | wc -c # " 3" (x)
echo -n "$FOO" | wc -c | bc # "3" (√)
echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√)
echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√)
echo -n "$FOO" | wc -c | perl -pe 's/^\s+//' # "3" (√)
echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x)
echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
cut -f*
주어진 출력이 가질 수있는 정확한 선행 공간 수를 알아야하므로 일반적으로 방법에 의존하지 않습니다 . 그리고 grep
하나는 문자를 세지 않고 줄을 세는 데 효과적입니다.
bc
가장 간결하고, awk
그리고 perl
약간의 과잉을 보이지만, 그들은 모두 상대적으로 빠르고 휴대 충분합니다.
또한 이들 중 일부는 일반 문자열에서 ( echo `echo $FOO`
다른 깔끔한 트릭 과 함께) 주변 공백을 자르도록 조정할 수 있습니다 .
echo `echo $FOO`;
변수에 대한 String.trim () 명령처럼 작동합니다! 놀랍도록 편리합니다. 또한 귀하의 답변을 내 답변에 추가하겠습니다.
printf
더 낫 echo
습니까?
분명히, 이것에 대한 많은 해결책이 있습니다. 여기 또 다른 것이 있습니다.
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
이것은 단지 라인의 수를 출력하지만, 후행 개행 문자 ( \n
) 당신이 그 중 하나를 원하지 않는 경우, 교체, 존재 [:blank:]
와 함께 [:space:]
.
test9
, 한 줄이 들어있는 파일의 경우 출력은 19입니다.
가장 좋은 방법은 먼저 디렉토리의 모든 파일을 찾은 다음 AWK NR (레코드 수 변수)을 사용하는 것입니다
아래는 명령입니다.
find <directory path> -type f | awk 'END{print NR}'
예 : - find /tmp/ -type f | awk 'END{print NR}'
wc -l < file.txt
작업을 정확하고 간결하게 수행합니다.