
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
.
printf
0으로 채워진 3자리 카운터를 얻으려면 다음 형식 문자열을 사용하여 카운터를 출력합니다 %.3d\n
.
printf '%.3d\n' "$counter"
... 대신에 echo "$counter"
.
의미 에 대한 설명은 C 라이브러리 함수 ( , 해당 쉘은 주로 동일한 형식 문자열을 사용함) %.3d\n
의 문서를 참조하세요 .printf
man 3 printf