ファイルのバイト数、単語数、行数を表示します。

ファイルのバイト数、単語数、行数を表示します。

シェルスクリプトを作成したいです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"

おすすめ記事