Estoy trabajando en una tarea en la que me piden que cree un script que obtenga un nombre de archivo como parámetro y luego se supone que debe imprimir todas las líneas del archivo más su longitud al final, por ejemplo: leche de plátano = >leche de plátano 11 unix y linux =>unix y linux 14 macbook pro =>macbook pro 11
Respuesta1
Esto imprime cada línea en un archivo seguida de la longitud de la línea (en términos de número de caracteres sin incluir el delimitador de línea en implementaciones de awk compatibles con POSIX, aunque algunas le darán el número de bytes en su lugar).
<FOO awk '{print $0,length}'
Aunque no estoy seguro si eso es lo que estás preguntando.
Respuesta2
La awk
solución es la mejor, pero si no quieres usar awk, aquí tienes algunas 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"
La wc -c <<< "$line"
variante dará números uno más altos que los demás, porque incluye una nueva línea.
Respuesta3
No estoy exactamente seguro de lo que estás buscando. El siguiente script debería proporcionar exactamente el resultado que desea.
#!/bin/bash
cat $1
cat $1 | wc -m