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\n
C 라이브러리 함수에 대한 설명서를 참조하세요 printf
( man 3 printf
셸에 해당하는 함수는 대부분 동일한 형식 문자열을 사용함).