파일의 줄 수를 반복하는 방법

파일의 줄 수를 반복하는 방법

텍스트 파일의 행을 반복하고 싶습니다 a.txt. 파일에 6줄이 있으면 다음과 같이 할 수 있습니다.

for c in {1..6} ; do echo $c; done

인쇄:

1
2
3
4
5
6

행 수를 다음과 같이 계산할 수 있습니다.

wc -l a.txt | cut -f1 -d' '

이것은 만든다2852

wc이제 아래와 같이 개수를 for 루프로 바꾸려고 하면 루프가 작동하지 않습니다.

for c in {1..$(wc -l ~/a.txt| cut -f1 -d' ')} ; do echo $c; done

1에서 2852 사이의 숫자를 인쇄하는 대신 다음을 인쇄합니다.

{1..2852}

올바른 숫자 순서를 얻으려면 위 루프에서 서브셸 사용법을 어떻게 수정해야 합니까?

( bash --version예(데비안):

GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.

)

답변1

배쉬는 그렇지 않았다변수를 괄호 안에 넣는 함수입니다.

var=$(wc -l ~/a.txt| cut -f1 -d' ')}
echo {0..$var}

루프를 사용할 수 있습니다.

for ((i=0; i<var; i++)); do
    echo "$i"
done

작동하더라도 다음은 피해야 합니다.

eval echo {0..$var}

eval"악"의 일반적인 철자 오류입니다.
바라보다http://mywiki.wooledge.org/BashFAQ/048

답변2

실제로 파일을 처리하기 위해 파일의 줄 수를 알 필요는 없습니다. 쉘 루프를 사용하지 않고도 파일을 처리하기만 하면 됩니다 awk.

awk '{ print "do something on line#", NR, $0 }' infile

존재하다, 내부 변수 NR가 반환됩니다.질소수량오른쪽ecord(/Line)은 $0처리를 위해 현재 읽은 줄의 내용입니다.

관련 정보