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 ...)