
for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done
Me da un error:
-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")
Respuesta1
La salida de wc -l sedtest1
será algo como:
21 sedtest1
Entonces la prueba se convertirá en algo así a <= 21 sedtest1
como inválido.
Además, eso significa que el wc
comando se ejecutará para cada iteración del bucle. Si el contenido del sedtest1
archivo no cambia entre cada iteración, sería mejor guardar ese número de líneas primero en una variable fuera del bucle:
n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done
También sospecho que estás intentando utilizar un bucle para procesar texto de una forma ineficiente y sin shell. Quizás quieras leer¿Por qué se considera una mala práctica utilizar un bucle de shell para procesar texto?. Recorrer cada línea de un archivo de esa manera no es el camino correcto a seguir.
Respuesta2
No importa, estaba siendo increíblemente estúpido...
wc -l file
los resultados son "archivo x".
Todo lo que tenía que hacer era esto:
for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done