#!/usr/bin/awk
BEGIN {
}
{
content[$0]++
}
END {
#1. 전화번호 출력
print "1. 전화번호 출력";
print "---------------------------------------------------";
for ( body in content )
{
split(body,array,":");
print array[2];
}
print "---------------------------------------------------";
#2. Dan의 전화번호 출력
print "2. Dan의 전화번호 출력";
print "---------------------------------------------------";
for ( body in content )
{
split(body,line);
if ( line[1] == "Dan" )
{
split(body,array,":");
print array[2];
}
}
print "---------------------------------------------------";
#3. Susan의 성(first name)과 전화번호 출력
print "3. Susan의 성(first name)과 전화번호 출력";
print "---------------------------------------------------";
for ( body in content )
{
split(body,line);
if ( line[1] == "Susan" )
{
split(body,array,":");
split(line[2],name,":");
print name[1],array[2];
}
}
print "---------------------------------------------------";
#4. D로 시작하는 성(first name) 출력
print "4. D로 시작하는 성(first name) 출력";
print "---------------------------------------------------";
for ( body in content )
{
split(body,line);
if ( line[2] ~/[D]/ )
{
split(line[2],name,":");
print name[1];
}
}
print "---------------------------------------------------";
#5. C나 E로 시작하는 이름(second name) 출력
print "5. C나 E로 시작하는 이름(second name) 출력";
for ( body in content )
{
split(body,line);
if ( line[1] ~/[CcEe]+/ )
{
print line[1];
}
}
print "---------------------------------------------------";
#6. 네 개의 문자로만 구성된 이름 출력
print "6. 네 개의 문자로만 구성된 이름 출력";
for ( body in content )
{
split(body,line);
if ( length(line[1]) == 4 )
{
print line[1];
}
}
print "---------------------------------------------------";
#7. 지역번호가 916인 사람들의 이름 출력
print "7. 지역번호가 916인 사람들의 이름 출력";
for ( body in content )
{
split(body,line);
split(body,array,":");
split(array[2],tel, "[()]");
match(array[2],/\([0-9]+\)/);
dial = substr(array[2],RSTART+1,RLENGTH-2)
if ( dial == "916" )
{
split(line[2],name,":");
print line[1]", "name[1];
}
}
print "---------------------------------------------------";
#8. Mike의 기부금 출력
print "8. Mike의 기부금 출력";
for ( body in content )
{
split(body,line);
split(body,array,":");
if ( line[1] == "Mike" )
{
mikeSum=array[3]+array[4]+array[5];
print mikeSum;
}
}
print "---------------------------------------------------";
#9. first name, 쉼표, second name 순서로 이름 출력
print "9. first name, 쉼표, second name 순서로 이름 출력";
for ( body in content )
{
split(body,line);
split(line[2],name,":");
print name[1]", "line[1];
}
print "---------------------------------------------------";
#10. 첫 번째 달에 100달러 이상 기부한 사람들의 이름 출력
print "10. 첫 번째 달에 100달러 이상 기부한 사람들의 이름 출력";
for ( body in content )
{
split(body,line);
split(body,array,":");
if ( array[3] >= 100 )
{
print line[1];
}
}
print "---------------------------------------------------";
#11. 첫 번째 달에 60달러 이하 기부한 사람들의 전체 레코드 출력
print "11. 첫 번째 달에 60달러 이하 기부한 사람들의 전체 레코드 출력";
for ( body in content )
{
split(body,array, ":");
if ( array[3] <= 60 )
{
print body;
}
}
print "---------------------------------------------------";
#12. 3개월 동안 800달러 이상 기부한 사람들의 이름과 액수 출력
print "12. 3개월 동안 800달러 이상 기부한 사람들의 이름과 액수 출력";
for ( body in content )
{
split(body,line);
split(body,array,":");
donerSum = array[3]+array[4]+array[5];
if ( donerSum >= 800 )
{
split(line[2],name,":");
print line[1]","name[1],donerSum
}
}
print "---------------------------------------------------";
#13. 매월 150달러 이상 기부한 사람들의 이름과 전화번호, 액수 출력
print "13. 매월 150달러 이상 기부한 사람들의 이름과 전화번호, 액수 출력";
for ( body in content )
{
split(body,array,":");
split(body,line);
sum = 0;
for ( item in array )
{
if ( item ~/[0-9]+/ && item >= 150 )
sum += array[item];
}
split(line[2],name,":");
if ( sum > 0 )
print line[1], name[1], array[2], sum;
}
print "---------------------------------------------------";
#14. 레코드의 번호와 필드 개수를 행 앞에 표시
# awk '{column=row=1;split($0,array,":");printf "(%2d)",record++;for(item in array)printf "[%2d] %s ",column++,array[item];printf "\n";}' record = 1;
for ( body in content )
{
column = 1;
printf "("record++") ";
split(body,array,":");
for ( item in array )
{
printf "[%d] %s ", column++, array[item];
}
printf "\n"
}
print "---------------------------------------------------";
#15. 사람들의 이름과 총 기부 금액 출력
# awk '{split($0,array,":");sum=0;for(item in array) if ( item ~/[0-9]+/) sum+=array[item]; print array[1], sum;}'
print "15. 사람들의 이름과 총 기부 금액 출력";
for ( body in content )
{
split(body,line);
split(body,array,":");
sum = 0;
for ( item in array )
{
if ( item ~/[0-9]+/ )
sum += array[item];
}
split(line[2],name,":");
print line[1], name[1]," Total Donation is",sum;
}
print "---------------------------------------------------";
}