Я пытаюсь умножить поле $ 2 либо .75 или .1AWK шаблону с, если
У меня есть эти данные:
Disputed,279
Processed,12112
Uncollected NSF,4732
Declined,14
Invalid/Closed Account,3022
Awk заявление:
#!/usr/local/bin/gawk -f
BEGIN { FPAT="([^,]*)|(\"[^\"]+\")"; FS=OFS=","; OFMT="%.2f"; }
{
if ($1 "/Disputed|Uncollected|Invalid/")
$3 = $2 * .75
else
if ($1 ~ "/Processed|Declined/")
$3 = $2 * 0.10
print
}
Прогнозный выход:
Disputed,279,209.25
Processed,12112,1211.2
Uncollected NSF,4732,3549
Declined,14,1.4
Invalid/Closed Account,3022,2266.5
Актуальная резина ULTS:
Disputed,279,209.25
Processed,12112,9084
Uncollected NSF,4732,3549
Declined,14,10.5
Invalid/Closed Account,3022,2266.5
Они умножаются на .75: Спорный, Несобранный НФС и Invalid/Closed счет
Они умножаются на .1: Переработанные и Отклонены
, что вызывает все записи должны быть умножены .75?
редактировать: это мой рабочий раствор ...
#!/usr/local/bin/gawk -f
BEGIN {
FPAT="([^,]*)|(\"[^\"]+\")"
FS=OFS=","
OFMT="%.2f"
print "status","acct type","count","amount"
}
NF>1 {
$4=$3 * ($1 ~ /Processed|Declined/ ? 0.10 : 0.75)
print
trans+=$3
fee+=$4
}
END {
printf "------------\n"
print "# of transactions: " trans
print "processing fee: " fee
}
Да, есть четыре поля. $ 2 - скрытое специальное поле!
status,acct type,count,amount
Processed,Savings,502,50.2
Uncollected NSF,Checking,4299,3224.25
Disputed,Checking,263,197.25
Processed,Checking,11610,1161
Uncollected NSF,Savings,433,324.75
Declined,Checking,14,1.4
Invalid/Closed Account,Checking,2868,2151
Disputed,Savings,16,12
Invalid/Closed Account,Savings,154,115.5
------------
# of transactions: 20159
processing fee: 7237.35
Что должно произойти, если у вас есть какой-то шаблон, кроме спорного, Несобранные, Invalid, обрабатываемые Отклонено? У вас нет окончательного предложения 'else', поэтому вы не добавляете' $ 3', и вы просто печатаете входные данные. Но это логическая проблема, совершенно отличная от поведения, которое вы видите, которое было рассмотрено в ответах. –
Ну, я действительно должен иметь три значения .75, и все остальные умножаются на .10. Я открыт для совершенствования! –
OK; поэтому отпустите второй 'if' и попробуйте' else' просто умножить на 0.10. –