파일의 바이트, 단어 및 줄 수를 표시합니다.

파일의 바이트, 단어 및 줄 수를 표시합니다.

쉘 스크립트를 만들고 싶습니다 df. 왜냐하면 df name_of_file파일 내용을 입력하고 가져오고 싶기 때문입니다 .

파일 이름이 디렉토리에 있으면 그 내용을 표시하고 싶습니다. 그렇지 않은 경우 크기를 단어, 줄, 바이트 단위로 표시하고 싶습니다. 나는 무엇을 해야 합니까? 지금까지 나는 이것을 가지고 있습니다 :

#!/bin/bash
FILENAME=$FILENAME
FILEBYTES=$(stat -c%s "$FILENAME")
FILEWORDS=$(stat -w%s "$FILENAME")
FILELINES=$(stat -l%s "$FILENAME")
echo "Size of $FILENAME in bytes = $FILEBYTES  bytes, $FILEWORDS words, $FILELINES lines."

답변1

나는 이렇게 할 것이다:

#!/bin/bash

FILENAME=$1

[ -f "$FILENAME" ] || exit

FILEBYTES=$(stat -c%s "$FILENAME")
FILEWORDS=$(wc -w "$FILENAME" | awk '{print $1}')
FILELINES=$(wc -l "$FILENAME" | awk '{print $1}')

printf "Size of %s -- %s bytes, %s words, %s lines.\n" \
        "$FILENAME" "$FILEBYTES" "$FILEWORDS" "$FILELINES"

다음 파일이 있다고 가정해 보겠습니다.

$ ls -l | grep bbbb
-rw-rw-r--   1 saml saml    3283 May 18 02:49 bbbb

이제 이라는 스크립트를 실행합니다 df.bash. 이 df명령은 Unix에서 사용되었습니다.

$ ./df.bash bbbb 
Size of bbbb -- 3283 bytes, 386 words, 94 lines.

존재하지 않는 파일 찾기:

$ ./df.bash bbbbbbb
$ 

대체 방법

awk카운팅 대신 병합 및 카운트를 수행하면 낭비되는 통화를 줄일 수 있습니다 wc.

#!/bin/bash

FILENAME=$1

[ -f "$FILENAME" ] || exit

FILEBYTES=$(stat -c%s "$FILENAME")
FILEWORDS=$(awk '{ total = total + NF }; END {print total}' "$FILENAME")
FILELINES=$(awk 'END {print NR}' "$FILENAME")

printf "Size of %s -- %s bytes, %s words, %s lines.\n" \
        "$FILENAME" "$FILEBYTES" "$FILEWORDS" "$FILELINES"

답변2

넌 이걸 원해?

 #! /bin/bash
 if [[ -f $(basename "$1") ]]
    then
       cat "$1"
    else
       wc -w -l -c "$1"
 fi

그런데 df이미 디스크 공간 사용량을 표시하는 명령이 있습니다. 스크립트를 다른 이름으로 부르는 것이 좋습니다.

관련 정보