다음 데이터가 포함된 입력 파일이 있습니다.
November 400
January 200
June 400
March 200
April 200
May 300
July 400
August 300
September 400
February 300
October 300
December 200
데이터 파일을 한 줄씩 처리한 다음 이를 출력 파일로 보내면 다음과 같은 결과가 나오는 루프 구조를 만들어야 합니다.
Month Sales
----- -----
January 200
February 300
March 200
April 200
May 300
June 400
July 400
August 300
September 400
October 300
November 400
December 200
Total show the total
Average show the average
데이터를 가져오고 올바르게 출력하는 데 문제가 있습니다. 구문을 정리하기 위해 쉘 검사를 사용해 보았지만 문제가 발생했습니다. 코드는 다음과 같습니다.
#!bin/bash
awk >>practicefile.output
BEGIN{
print "Month\tSales"
print "-----\t-----"
{ Month[$1] = $2; next }
{ lines[(Month[$1])] = $1 (Month[$1]) $2 }
END {
for (i=1; i<=7; i++) {
if (lines[sales[i]])
print lines[month[i]]
else
print month, sales[i]
fi
}
}
답변1
원하는 출력을 얻었습니다
Month Sales
----- -----
January 200
February 300
March 200
April 200
May 300
June 400
July 400
August 300
September 400
October 300
November 400
December 200
Total 3600
Average 300
다음 스크립트를 사용하십시오(다른 이름으로 저장 test.awk
).
BEGIN {
print "Month Sales"
print "----- -----"
}
{ printf "%-9s %s\n", $1, $2 }
{ sum += $2 }
END {
printf "\nTotal %s\n", sum
printf "\nAverage %s\n", sum / NR
}
그리고 그것을 그렇게 부르세요 sort -k1,1M input.txt | awk -f test.awk
.
설명: printf "%-9s", $1
문자열( )에 $1
최대 9자의 패딩(공백 포함)을 추가합니다 . sort -k1,1M
입력을 월별로 정렬합니다. 전혀 이상하지는 않지만 훨씬 간단합니다.