Estou trabalhando em uma tarefa que me pede para criar um script que recebe um nome de arquivo como parâmetro e então deve imprimir todas as linhas do arquivo mais seu comprimento no final delas, por exemplo: banana milk = >banana milk 11 unix e linux =>unix e linux 14 macbook pro =>macbook pro 11
Responder1
Isso imprime cada linha em um arquivo seguida pelo comprimento da linha (em termos de número de caracteres, não incluindo o delimitador de linha em implementações awk compatíveis com POSIX, embora algumas forneçam o número de bytes).
<FOO awk '{print $0,length}'
não tenho certeza se é isso que você está perguntando.
Responder2
A awk
solução é a melhor, mas, se você não quiser usar o awk, aqui vão algumas alternativas:
while IFS= read -r line
do
printf "%s %d\n" "$line" "${#line}"
done < "$1"
while IFS= read -r line
do
printf "%s %d\n" "$line" "$(expr "$line" : '.*')"
done < "$1"
while IFS= read -r line
do
printf "%s %d\n" "$line" "$(printf "%s" "$line" | wc -c)"
done < "$1"
while IFS= read -r line
do
printf "%s %d\n" "$line" "$(wc -c <<< "$line")"
done < "$1"
A wc -c <<< "$line"
variante fornecerá números um acima dos outros, porque inclui uma nova linha.
Responder3
Não tenho certeza do que você está procurando. O script a seguir deve fornecer exatamente a saída desejada.
#!/bin/bash
cat $1
cat $1 | wc -m