텍스트 파일의 튜플 또는 이름 목록을 반복합니다.

텍스트 파일의 튜플 또는 이름 목록을 반복합니다.

Linux 스크립트에 다음 명령이 있습니다.

#!/bin/bash

for i in "001 ARG1" "002 ARG2" "003 ARG3"
do
    set -- $i
    echo $1
    echo $2
done

001과 ARG1은 본질적으로 튜플입니다.

forloop에 로드할 수 있는 텍스트 파일로 이러한 튜플을 이동할 수 있는 방법이 있습니까? 너무 많아서 이런 텍스트 파일을 저장할 것입니다

ARG1
ARG2
ARG3

또는

001 ARG1
002 ARG2
003 ARG3

스크립트는 다음과 같습니다.

for i in textfile.txt
do
    set -- $i
    echo $1
    echo $2
done

같은 결과를 얻나요?

001 002를 자동으로 계산하는 방법이 있나요? Python에서 counter = 0 및 counter+=1을 설정하고 변수를 할당하는 방법과 같습니다.

답변1

입력 파일의 두 번째 예에 표시된 대로 파일의 각 줄에 두 개의 공백 또는 탭으로 구분된 단어를 제공합니다.

while read -r word1 word2; do
    echo "$word1"
    echo "$word2"
done <textfile.txt

이는 각 줄의 첫 번째 단어 $word1와 줄의 나머지 부분을 읽습니다 $word2.

입력은 리디렉션을 통해 파일에서 가져오는 read복합 명령의 입력으로 제공됩니다 .while

입력에 문자가 나타나는 경우 문자가 특별한 방식으로 해석 -r되지 않도록 하는 옵션이 있습니다.read\

한 줄에 한 단어와 카운터:

counter=0
while read -r word; do
    counter=$(( counter + 1 ))
    echo "$counter"
    echo "$word"
done <textfile.txt

이렇게 하면 반복할 때마다(에서 읽은 각 행에 대해) 카운터가 1씩 증가합니다 textfile.txt.

0으로 채워진 세 자리 카운터를 얻으려면 printf다음 형식 문자열을 사용하여 카운터를 출력하십시오 %.3d\n.

printf '%.3d\n' "$counter"

... 바꾸다 echo "$counter".

의미에 대한 설명은 %.3d\nC 라이브러리 함수에 대한 설명서를 참조하세요 printf( man 3 printf셸에 해당하는 함수는 대부분 동일한 형식 문자열을 사용함).

관련 정보