[shell] “wc -l”을 사용하여 파일 이름없이 줄 수만 인쇄하는 방법은 무엇입니까?

wc -l file.txt

줄 수와 파일 이름을 출력합니다.

파일 자체가 아닌 숫자 자체 만 있으면됩니다.

나는 이것을 할 수있다

 wc -l file.txt | awk '{print $1}'

그러나 더 좋은 방법이 있습니까?



답변

이 방법으로 시도하십시오 :

wc -l < file.txt


답변

cat file.txt | wc -l

매뉴얼 페이지 에 따르면 (BSD 버전의 경우 확인할 GNU 버전이 없습니다).

파일을 지정하지 않으면 표준 입력이 사용되며 파일 이름이 표시되지 않습니다. 대부분의 환경에서 EOF 또는 [^ D]를 수신 할 때까지 프롬프트가 입력을 수락합니다.


답변

선행 공간 없이이 작업을 수행하려면 왜 안됩니까?

wc -l < file.txt | bc


답변

어때요?

wc -l file.txt | cut -d' ' -f1

즉, 출력 wccut(구분자가 공백이고 첫 번째 필드 만 선택)에 파이프


답변

기술 비교

에서 제공하는 선행 공백없이 문자 수를 얻으려고하는 비슷한 문제가 있어서이 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`다른 깔끔한 트릭 과 함께) 주변 공백을 자르도록 조정할 수 있습니다 .


답변

어때요?

grep -ch "^" file.txt


답변

분명히, 이것에 대한 많은 해결책이 있습니다. 여기 또 다른 것이 있습니다.

wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"

이것은 단지 라인의 수를 출력하지만, 후행 개행 문자 ( \n) 당신이 그 중 하나를 원하지 않는 경우, 교체, 존재 [:blank:]와 함께 [:space:].