for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done
나에게 오류가 발생합니다 :
-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")
답변1
의 출력은 wc -l sedtest1
다음과 유사합니다.
21 sedtest1
a <= 21 sedtest1
그러면 그 시험은 그렇게 무효한 것이 될 것입니다 .
또한 이는 wc
루프가 반복될 때마다 명령이 실행된다는 의미입니다. 각 반복 사이에 파일 내용이 sedtest1
변경되지 않으면 먼저 루프 외부의 변수에 줄 번호를 저장하는 것이 좋습니다.
n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done
나는 또한 당신이 루프를 사용하여 비효율적이고 쉘이 아닌 방식으로 텍스트를 처리하려고 시도하고 있다고 의심합니다. 당신은 읽고 싶을 수도 있습니다쉘 루프를 사용하여 텍스트를 처리하는 것이 왜 나쁜 습관으로 간주됩니까?. 이런 식으로 파일의 각 줄을 반복하는 것은 올바른 접근 방식이 아닙니다.
답변2
괜찮아요, 제가 정말 멍청해서요...
wc -l file
출력은 "x 파일"입니다.
내가 해야 할 일은 이것이다:
for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done