【发布时间】:2019-12-23 17:05:18
【问题描述】:
我正在编写一个需要生成需要排序的输出的 awk 脚本。
我能够在 awk 数组中获得所需的未排序输出。我尝试使用以下代码对数组进行排序并且它可以工作,但我不知道为什么以及它是否是预期的行为。
问题输入示例:
Ram,London,200
Alex,London,500
David,Birmingham,300
Axel,Mumbai,150
John,Seoul,450
Jen,Tokyo,600
Sarah,Tokyo,630
预期的输出应该是:
Birmingham,300
London,700
Mumbai,150
Seoul,450
Tokyo,1230
需要以下脚本来显示城市名称以及第三个字段中存在的整数的相应累积总数。
BEGIN{
FS = ","
OFS = ","
}
{
if($2 in arr){
arr[$2]+=$3;
}else{
arr[$2]=$3;
}
}
END{
for(i in arr){
print i,arr[i] | "sort"
}
}
以下代码有问题:
for(i in arr){
print i,arr[i] | "sort"
}
print 的输出通过管道传递给 sort,这是一个 bash 命令。 那么,这个输出是如何从 awk 传输到 bash 的呢?
这是预期的行为还是仅仅是副作用?
有更好的 awk 方法吗?已经尝试过 asort 和 asorti,但它们存在 gawk 而不是 awk。
PS:我正在尝试专门为该任务编写一个 .awk 文件,而不使用 bash 命令。请提出相同的建议。
【问题讨论】:
-
如果你不想使用像
sort这样的外部程序或 gawk 特定的东西(我自己会使用PROCINFO["sorted_in"]="@ind_str_asc"来使用它来获得排序输出),你必须编写你的awk 中自己的排序例程。如果您通过四处搜索找到现有的,也不会感到惊讶。 -
@Shawn 这是合法使用还是只是副作用?
-
管道 awk
print输出到另一个程序?是的,这是有效的。
标签: awk