变量格式字符串时的awk/gawk printf,将零更改为破折号

变量格式字符串时的awk/gawk printf,将零更改为破折号,awk,printf,Awk,Printf,我有一个用awk打印的数字表,使用printf printf完成数字的一些截断 (cat <<E\OF Name,Where,Grade Bob,Sydney,75.12 Sue,Sydney,65.2475 George,Sydney,84.6 Jack,Sydney,35 Amy,Sydney, EOF )|gawk 'BEGIN{FS=","} FNR==1 {print("Name","Where","Grade");next} {if ($3<50) {$3=0} p

我有一个用awk打印的数字表,使用
printf

printf
完成数字的一些截断

(cat <<E\OF
Name,Where,Grade
Bob,Sydney,75.12
Sue,Sydney,65.2475
George,Sydney,84.6
Jack,Sydney,35
Amy,Sydney,
EOF
)|gawk 'BEGIN{FS=","}
FNR==1 {print("Name","Where","Grade");next}
{if ($3<50) {$3=0}
printf("%s,%s,%d \n",$1,$2,$3)}'
我想要的是显示小于50的分数,或者缺少分数,用破折号(“-”)表示

这需要将
printf
中的第三个字符串格式从%d更改为%s。 因此,在某些行中,第三列应该是值,在某些行中,第三列应该是字符串。我怎么能让你呆呆地看着呢?或者我应该通过另一个awk来重新格式化

$ gawk 'BEGIN{FS=","}
FNR==1 {print("Name","Where","Grade");next}
{if ($3<50) {$3="-"} else {$3=sprintf("%d", $3)}
printf("%s,%s,%s \n",$1,$2,$3)}' ip.txt
Name Where Grade
Bob,Sydney,75 
Sue,Sydney,65 
George,Sydney,84 
Jack,Sydney,- 
Amy,Sydney,- 
  • ?:
    三元运算符是if-else的替代运算符
  • 1
    是一种用于打印
    $0

请添加一些示例输入,并显示该示例的预期输出。。这将有助于更好地理解你的问题,并让回答者测试他们的解决方案……目前唯一清楚的是——无论你想做什么,不,你都不应该通过另一个awk来重新格式化。
^1
第二个脚本。显然你不会用第一个@Sundeep“假设你错过了……”。正确:)
Name Where Grade
Bob,Sydney,75 
Sue,Sydney,65 
George,Sydney,84 
Jack,Sydney,- 
Amy,Sydney,- 
$ gawk 'BEGIN{FS=","}
FNR==1 {print("Name","Where","Grade");next}
{if ($3<50) {$3="-"} else {$3=sprintf("%d", $3)}
printf("%s,%s,%s \n",$1,$2,$3)}' ip.txt
Name Where Grade
Bob,Sydney,75 
Sue,Sydney,65 
George,Sydney,84 
Jack,Sydney,- 
Amy,Sydney,- 
$ awk -F, -v OFS=, 'NR>1{$3 = $3 < 50 ? "-" : int($3)} 1' ip.txt
Name,Where,Grade
Bob,Sydney,75
Sue,Sydney,65
George,Sydney,84
Jack,Sydney,-
Amy,Sydney,-