"for" 루프를 사용하여 각 줄을 입력으로 처리하고 파일을 한 줄씩 연속해서 읽습니다.

"for" 루프를 사용하여 각 줄을 입력으로 처리하고 파일을 한 줄씩 연속해서 읽습니다.

다음 값을 가진 file.txt 파일을 고려하십시오.

one,two
three,four
five,six
six,seven
red,tree

다음 활동을 수행하려면 셸 스크립트 명령이 필요합니다.

  1. For 루프, file.txt와 동일한 라인 수에 대해 루프를 계속 실행해야 합니다.
  2. 각 루프 실행에서 해당 라인은 실행에 대한 입력으로 간주되어야 합니다.

예를 들어 첫 번째 루프 실행에서는 한 변수에 "1"을 저장하고 다른 변수에 "2"를 저장해야 실행 중에 변수 값이 사용됩니다.

Input1="one"
Input2="two"

두 번째 줄 실행과 유사하게 "3"은 하나의 변수에 저장되어야 하고 "4"는 다른 변수에 저장되어야 합니다.

Input1="three"
Input2="four"

답변1

while IFS=, read -r input1 input2; do
    # do stuff with "$input1" and "$input2"
done <file.txt

이 명령에 IFS쉼표를 설정하면 read각 입력 줄이 쉼표로 구분됩니다. 행의 두 필드를 읽어서 input1합계를 계산합니다 input2.

행에 2개 이상의 필드가 있는 경우 "나머지" 데이터가 에 배치됩니다 input2.

데이터로 무엇을 하려는지에 따라 이는 좋은 생각일 수도 있고 아닐 수도 있습니다. 바라보다쉘 루프를 사용하여 텍스트를 처리하는 것이 왜 나쁜 습관으로 간주됩니까?

awk이는 루프 없이 다음과 같은 데이터를 구문 분석하는 데 특히 유용하다는 것을 알 수 있습니다 .

$ awk -F, '{ printf("Line %d:\n\tField 1 = %s\n\tField 2 = %s\n", NR, $1, $2) }' file.txt
Line 1:
        Field 1 = one
        Field 2 = two
Line 2:
        Field 1 = three
        Field 2 = four
Line 3:
        Field 1 = five
        Field 2 = six
Line 4:
        Field 1 = six
        Field 2 = seven
Line 5:
        Field 1 = red
        Field 2 = tree

답변2

당신이 무엇을 요구하고 있는지 명확하지 않습니다. 각 반복마다 전체 파일이 필요한 이유는 무엇입니까?

이것이 필요합니까?

while IFS=, read -r Input1 Input2; do
    # do something with the variables
    echo "1=$Input1  2=$Input2"
done < file.txt

관련 정보