programing

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

batch 2023. 5. 6. 14:11
반응형

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

가장 간단한 답변:

wc < filename 

정당:

wc -l < file_name

그 일을 할 것입니다. 이 가 붙은 이 그나이출다같접은포공으로 포함됩니다.wc번호를 오른쪽으로 이동합니다.

명령을 사용하여 다음의 첫 단어만 가져올 수 있습니다.wc 카운트 " " " " (으"로 표시됨

lines=`wc -l $f | cut -f1 -d' '`
words=`wc -w $f | cut -f1 -d' '`
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 및 리눅스에서 휴대할 수 있어야 합니다.

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

OR

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

OR

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 *

공백이 포함된 파일 이름이 있는 경우 작동합니다.

만약 당신이 글로빙을 사용할 수 없다면, 당신은 파이프를 사용해야 합니다.while read슬롯:슬라이드:

find ... | while read -r f

또는 프로세스 대체를 사용합니다.

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

파이작전화걸를있여습다니가로 전화할 수 .wc다음과 같은 방법을 사용하여 추가 프로세스에 대한 배관 작업을 방지합니다.

lines=$((`wc -l "$f"`))
words=$((`wc -w "$f"`))

$((...))bash의 산술 확장입니다.출력에서 공백을 제거합니다.wc이 경우에는

줄 수 또는 단어 필요한 경우 이 솔루션이 더 의미가 있습니다.

와 함께 하는건 어때요?sed?

wc -l /path/to/file.ext | sed 's/ *\([0-9]* \).*/\1/'
typeset -i a=$(wc -l fileName.dat  | xargs echo | cut -d' ' -f1)

숫자 결과에 대해 다음을 시도합니다.
$( -l < $nlines=$( wc -l < $myfile )

이와 같은 것이 도움이 될 수 있습니다.

#!/bin/bash
printf '%-10s %-10s %-10s\n' 'File' 'Lines' 'Words'
for fname in file_name_pattern*; {
    [[ -d $fname ]] && continue
    lines=0
    words=()
    while read -r line; do
        ((lines++))
        words+=($line)
    done < "$fname"
    printf '%-10s %-10s %-10s\n' "$fname" "$lines" "${#words[@]}"
}

행(1)wc 번, (변수를 , , 한불필 (2) 요한할않지,

read lines words <<< $(wc < $f | awk '{ print $1, $2 }')

전체 코드:

for f in *
do
    if [ ! -d $f ]
    then
        read lines words <<< $(wc < $f | awk '{ print $1, $2 }')
        echo "$f $lines $words"
    fi
done

출력 예:

$ find . -maxdepth 1 -type f -exec wc {} \; # without formatting
 1  2 27 ./CNAME
  21  169 1065 ./LICENSE
 33 130 961 ./README.md
  86  215 2997 ./404.html
  71  168 2579 ./index.html
 21  21 478 ./sitemap.xml

$ # the above code
404.html 86 215
CNAME 1 2
index.html 71 168
LICENSE 21 169
README.md 33 130
sitemap.xml 21 21

답변된 질문에서 제안된 해결책은 다윈 커널에 적용되지 않습니다.

모든 UNIX 시스템에서 작동하는 다음 솔루션을 고려해 보십시오.

  1. 파일의 줄 수를 정확하게 인쇄합니다.
wc -l < file.txt | xargs
  1. 파일의 문자 수를 정확하게 인쇄합니다.
wc -m < file.txt | xargs
  1. 파일의 바이트 수를 정확하게 인쇄합니다.
wc -c < file.txt | xargs
  1. 파일의 단어 수를 정확하게 인쇄:
wc -w < file.txt | xargs

스택 오버플로에 대한 예제가 있는 훌륭한 솔루션이 있습니다.

가장 간단한 솔루션을 여기에 복사합니다.

FOO="bar"
echo -n "$FOO" | wc -l | bc                     # "3"

이 페이지들을 병합해야 할까요?

사용해 보십시오.

wc `ls` | awk '{ LINE += $1; WC += $2 } END { print "lines: " LINE  " words: " WC }'

라인 카운트와 워드 카운트(LINE 및 WC)를 생성하고 wc에서 추출한 값(첫 번째 열 값에 $1, 두 번째 열 값에 $2 사용)으로 증가시킨 후 최종적으로 결과를 출력합니다.

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

answer=(`wc $f`)
echo -e"${answer[3]}
lines:  ${answer[0]}
words:  ${answer[1]}
bytes:  ${answer[2]}"

출력: myfile.txt 행: 10 단어: 20 바이트: 120

files=`ls`
echo "$files" | wc -l | perl -pe "s#^\s+##"

다음에 대해 입력 리디렉션을 사용해야 합니다.wc:

number_of_lines=$(wc -l <myfile.txt)

당신의 맥락에서 각각

echo "$f $(wc -l <"$f") $(wc -w <"$f")"

언급URL : https://stackoverflow.com/questions/3746947/get-just-the-integer-from-wc-in-bash

반응형