다음 값을 가진 file.txt 파일을 고려하십시오.
one,two
three,four
five,six
six,seven
red,tree
다음 활동을 수행하려면 셸 스크립트 명령이 필요합니다.
- For 루프, file.txt와 동일한 라인 수에 대해 루프를 계속 실행해야 합니다.
- 각 루프 실행에서 해당 라인은 실행에 대한 입력으로 간주되어야 합니다.
예를 들어 첫 번째 루프 실행에서는 한 변수에 "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