
for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done
Me dá um erro:
-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")
Responder1
A saída de wc -l sedtest1
será algo como:
21 sedtest1
Portanto, o teste se tornará algo a <= 21 sedtest1
inválido.
Além disso, isso significa que o wc
comando será executado para cada iteração do loop. Se o conteúdo do sedtest1
arquivo não mudar entre cada iteração, seria melhor salvar esse número de linhas primeiro em uma variável fora do loop:
n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done
Também suspeito que você esteja tentando usar um loop para processar texto de maneira ineficiente e sem shell. Você pode querer lerPor que usar um loop de shell para processar texto é considerado uma prática inadequada?. Fazer um loop em cada linha de um arquivo dessa maneira não é o caminho certo a seguir.
Responder2
Esqueça, eu estava sendo incrivelmente estúpido ...
wc -l file
saída como "arquivo x".
Tudo que eu tive que fazer foi isso:
for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done