Eu faria assim:
#!/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"
Exemplo
Digamos que eu tenha este arquivo:
$ ls -l | grep bbbb
-rw-rw-r-- 1 saml saml 3283 May 18 02:49 bbbb
Agora eu corro o seu script, chamei-o de df.bash
. O comando df
já está no Unix:
$ ./df.bash bbbb
Size of bbbb -- 3283 bytes, 386 words, 94 lines.
Procure um arquivo que não existe:
$ ./df.bash bbbbbbb
$
Método alternativo
Você pode salvar algumas chamadas perdidas consolidando e tendo awk
fazendo a contagem em vez de 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"