显示文件中的字节数、字数和行数

显示文件中的字节数、字数和行数

我想创建一个 shell 脚本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已经是一个显示磁盘空间使用情况的命令。最好将您的脚本称为其他名称。

相关内容