for f in ${FILES}; do
((COUNT++))
ln=$(wc -l ${f} | cut -f 1 -d ' ')
echo "File number ${COUNT} (${f}) has ${ln} lines"
done
답변1
for f in ${FILES}; do
((COUNT++))
ln=$(wc -l ${f} | cut -f 1 -d ' ')
echo "File number ${COUNT} (${f}) has ${ln} lines"
done
이것이 bash에서 for 루프의 모습입니다. 각 항목에 대해 (list)
해당 항목의 값을 변수라는 이름으로 할당한 f
다음 해당 [...]
섹션을 실행합니다.
for f in (list); do
[...]
done
아마도 이름이 지정된 파일에 공백으로 구분된 파일 이름 문자열이 할당되어 있을 것입니다.FILES
FILES="file1 file2 file3"
예를 들어 변수의 내용에 액세스하려면 FILES
변수 이름 앞에 $를 추가해야 합니다. 쓰거나$FILES
${FILES}
위 코드가 나열된 파일 수를 계산하려고 하기 때문에 어딘가에 0이 할당된 "COUNT"라는 변수도 있습니다.
그래서 우리는 ...
FILES="file1 file2 file3"
COUNT=0
for f in ${FILES}; do
[...]
done
f에 새 값이 할당될 때마다 [...] 부분이 실행됩니다.
[...] 섹션에는 무엇이 있나요? 먼저 COUNT 변수를 추가합니다. COUNT++를 사용하여 증가(COUNT 변수를 1씩 증가)하려면 산술 표현식을 (())로 묶어야 합니다.
((COUNT++))
다음으로 각 파일의 줄 수를 얻습니다.
ln=$(wc -l ${f} | cut -f 1 -d ' ')
그것을 분해해 봅시다.
wc -l ${f}
wc
우리는 (lines) 옵션-l
이 저장된 파일의 라인 수를 제공하는 (word count)라는 프로그램을 사용하고 있으며 ,$f
출력은 다음과 같습니다57 file1
(라인 수, 파일 이름).wc -l ${f}
| cut -f 1 -d ' '
우리는 행 수(57)와파일 이름이 아닙니다.wc
(file1), IE의 출력을 가져와서57 file1
isolate 명령의 입력으로 사용합니다. 운영자는 한 명령의 출력을 가져와 다른 명령의 입력으로 사용합니다. 이 옵션은 필드를 공백으로 자르도록 지정합니다. 즉, 첫 번째 필드를 출력한다는 의미입니다.cut
57
|
-d ' '
-f 1
57
$(
wc -l ${f} | cut -f 1 -d ' '
)
이제 우리의 명령은57
. 할당될 수 있도록 출력을 캡처하려면ln
다음으로 래핑되어야 합니다.$()
최종 출력은 "파일 번호 1(file1)에 57줄이 있습니다."입니다.
echo "File number ${COUNT} (${f}) has ${ln} lines"