[질문] 쉘 프로그래밍 문제 좀 풀어주세요.
안녕하세요? Unix Bourne 쉘스크립트(본쉘) 프로그래밍 책으로 공부하다가
궁금한것이 있어서 질문을 올립니다.
6개 문제중에 첫번째와 두번째는 했습니다. 그런데 이문제들이 계속 연결이
되는것인데 문제3부터 막힙니다. 회원님들의 친절한 답변 부탁 드립니다.
학생들 성적 파일
prac1.txt
학생ID 점수 이름
12345 3 kim
32314 2 choi
32123 8 lee
41231 park
prac2.txt
학생ID 점수 이름
32123 3 lee
41231 7 park
32314 choi
12345 3 kim
prac3.txt
학생ID 점수 이름
41231 park
32123 1 lee
12345 4 kim
32314 2 choi
문제1.
각파일에 학생들 성적 파일을 불러와서
각 파일에 있는 학생 성적을 sort와 join 명령어를 이용하여
학생번호를 오름차순으로 정렬하고 Mark 라는 파일로
합쳐서 저장하여라
각성적파일에 점수가 없는 학생도 있다. 이럴때는
공백 처리를 하여라
출력 예)
12345 3 3 4
32123 8 3 1
32314 2 2
41231 7
"제가 풀어본 문제 답입니다."
#/bin/sh
join -a 1 -a 2 -1 1 data1.txt data2.txt > tmp1
join -a 1 -a 2 -1 1 temf1 data3.txt > tmp2
sort tmp2 > Marks
문제2
loop, read, expr, echo 명령어를 사용하여 문제1에 대한 각학생들
총점수를 학생번호로 오름차순으로 정렬한뒤
Total 파일로 생성하여라. 학생 이름과 총점수사이에
':' 로 구분하여라.
출력 예)
12345:10
32123:12
32314:4
41231:7
"제가 풀어본 문제 답입니다."
#!/bin/sh
join -a 1 -a 2 -1 1 Prac1 Prac2 > tmp1
join -a 1 -a 2 -1 1 temf1 Prac3 > tmp2
sort tmp2 > Marks
while read stdid f1 f2 f3
do
a=`expr $f1 \& ${f2:=0}`
if [ $a -eq $f1 ]
then
b=`expr $f2 \& ${f3:=0}`
if [ $b -eq $f2 ]
then
((sum = f1 + f2))
((sum = sum + f3))
((avg = sum / 3))
else
((sum = f1 + f2))
((avg = sum / 2))
fi
else
((avg = f1))
((sum = f1))
fi
echo $stdid:$sum:$avg
done < Marks > sums
문제3
join 명령어를 사용하여 각학생의 총점수와 이름을 학생번호로
오름차순한뒤 Report파일로 저장하여라
학생 이름와 총점수, 이름 사이에 ':' 로 구분하여라.
출력 예)
12345:10:kim
32123:12:lee
32314:4:choi
41231:7:park
문제4
cut, paste, sort 명령어를 사용하여 학생번호로 오름차순
정렬하여 학생 이름와 총점수를 Summary 파일로 저장하여라
학생 이름와 총점수 사이에 ':' 로 구분하여라
출력 예)
kim:7
lee:13
choi:14
park:7
문제5
점수를 받지 못한 학생들을 학생번호와 받지못한 실습명을 Missing 파일로 저장하여라.
2개이상 점수를 받지못한 학생들에 대한 실습도 모두 저장하여라
실습명은 데이터 파일명와 같은 prac1, prac2, prac3로 출력하여라.
학생번호와 실습명사이에 ':'로 구분하고 실습명과 실습명사이에는 ',' 로 구분하여라.
출력 예)
32314:Prac2
41231:Prac1, Prac3
문제6
위에 문제를 작성한 코드를 토대로 다음 파일을 작성하여라.
우선 "Letters"라는 디렉토리를 작성하여라. 만약 기존에 "Letter"라는
디렉토리가 존재한다면 삭제하고 새로 생성하여라.
문제 2에서 학생 실습 총점수를 구하여 합격점수 값이 15점 미만이면,
아래에 있는 내용을 포함하여 학생번호.txt 를 생성한다.
(학생번호는 데이터화일에 있는 학생번호로 생성한다).
그리고 "-p" 옵션을 만들어 임의로 합격점수를 설정할수 있게 한다.
예) ass1 -p 18
"내용
(학생이름) 학생에게
당신은 ABC과목에서 실시한 실습을 불합격 하였습니다.
당신의 총 실습 점수는 (총점수) 입니다.
그리고 당신은 (점수받지못한실습명) 실습을 하지 않았습니다."
괄호() 안에 있는 것은 위 문제에서 구한 값들을 표시한다.
이렇게 문제 4개를 풀어주시면 감사하겠습니다. 그렇게 어려운것이 아니라서
회원님께서는 금방 하실 수 있으실 겁니다.
아무리 생각해 봐도 하질 못하겠습니다.
빠른 답변 부탁 드립니다.


댓글 달기