对于以下数据,我正在尝试使用awk文件来确定随时间推移的总数。(加班规则:工作超过40小时,每小时加班后获得1.5倍工资)
Natlie Attired 902-555-1234 10.40 44
Guy Wyre 401-555-3421 11.75 40这是我到目前为止所拥有的
BEGIN{
FS=" "
}
function total(){
hours = awk {print $5}
rate = awk {print $4}
if(hours<=40)
sum=rate*hours
return sum
else
sum=(hours - 40 * 1.5 * rate) + (rate*hours)
return sum
}
{
printf("%s %s worked %d hours, for a total pay of %.2f.\n", $1, $2,$5, total())
}为了给出准确的答案,我需要做哪些更改?
发布于 2014-09-29 04:35:41
要使其无错误地执行,我必须:
awk {print ...}和$5大括号为了使计算正确,我必须:
hours - 401.5用括号括起来表示为0.5 (或者用hours - 40(rate * 40))结果代码:
function total() {
hours = $5;
rate = $4;
if (hours <= 40) {
sum = rate * hours;
return sum;
}
else {
sum = ((hours - 40) * 0.5 * rate) + (rate * hours);
return sum;
}
}
{
printf("%s %s worked %d hours, for a total pay of %.2f.\n", $1, $2, $5, total());
}输出:
Natlie Attired worked 44 hours, for a total pay of 478.40.
Guy Wyre worked 40 hours, for a total pay of 470.00.发布于 2014-09-29 07:51:16
$ cat tst.awk
function total( regHours, otHours, rate, sum){
rate = $4
regHours = $5
if (regHours > 40) {
otHours = regHours - 40
regHours = 40
}
sum = ((otHours * 1.5) + regHours) * rate
return sum
}
{
printf "%s %s worked %d hours, for a total pay of %.2f.\n", $1, $2, $5, total()
}
$
$ awk -f tst.awk file
Natlie Attired worked 44 hours, for a total pay of 478.40.
Guy Wyre worked 40 hours, for a total pay of 470.00.https://stackoverflow.com/questions/26089173
复制相似问题