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
즉, 출력 wc
을 cut
(구분자가 공백이고 첫 번째 필드 만 선택)에 파이프
답변
기술 비교
에서 제공하는 선행 공백없이 문자 수를 얻으려고하는 비슷한 문제가 있어서이 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:]
.