[bash] bash의 wc에서 정수만 가져옵니다.

wc가 bash에서 반환하는 정수를 얻는 방법이 있습니까?

기본적으로 파일 이름 뒤에 줄 번호와 단어 수를 화면에 쓰고 싶습니다.

output: filename linecount wordcount
지금까지 내가 가지고있는 것은 다음과 같습니다.

files=`ls`
for f in $files;
do
        if [ ! -d $f ] #only print out information about files !directories
        then
                # some way of getting the wc integers into shell variables and then printing them
                echo "$f $lines $ words"
        fi
done



답변

cut명령을 사용하여 wc의 출력 의 첫 번째 단어 (줄 또는 단어 수) 만 가져올 수 있습니다 .

lines=`wc -l $f | cut -f1 -d' '`
words=`wc -w $f | cut -f1 -d' '`


답변

가장 간단한 대답 :

wc < filename 


답변

다만:

wc -l < file_name

일을 할 것입니다. 그러나이 출력에는 wc숫자 를 오른쪽 정렬 할 때 접두사가 붙은 공백이 포함됩니다 .


답변

wc $file | awk {'print "$4" "$2" "$1"'}

레이아웃에 맞게 조정하십시오.

또한 부정적 ( “디렉토리 아님”)보다 긍정적 인 논리 ( “파일 임”)를 사용하는 것이 더 좋습니다.

[ -f $file ] && wc $file | awk {'print "$4" "$2" "$1"'}


답변

때때로 wc는 다른 플랫폼에서 다른 형식으로 출력합니다. 예를 들면 :

OS X에서 :

$ echo aa | wc -l

         1

Centos에서 :

$ echo aa | wc -l

1

따라서 컷만 사용하면 번호가 검색되지 않을 수 있습니다. 대신 tr을 사용하여 공백 문자를 삭제하십시오.

$ echo aa | wc -l | tr -d ' '


답변

수락 된 / 인기있는 답변은 OSX에서 작동 하지 않습니다 .

다음 중 하나는 bsd 및 linux에서 이식 가능해야합니다.

wc -l < "$f" | tr -d ' '

또는

wc -l "$f" | tr -s ' ' | cut -d ' ' -f 2

또는

wc -l "$f" | awk '{print $1}'


답변

파일 이름을 리디렉션하면 wc출력에서 파일 이름이 생략됩니다.

세게 때리다:

read lines words characters <<< $(wc < filename)

또는

read lines words characters <<EOF
$(wc < filename)
EOF

를 사용하여 for의 출력을 반복 하는 대신 다음을 ls수행하십시오.

for f in *

공백을 포함하는 파일 이름이 있으면 작동합니다.

globbing을 사용할 수 없다면 while read루프 로 연결해야 합니다.

find ... | while read -r f

또는 프로세스 대체 사용

while read -r f
do
    something
done < <(find ...)