如何在 Linux 上的 awk 脚本中排序?

use*_*r25 3 shell awk text-processing sort

我有包含fruit以下内容的文件:

Apples, 12
Pears, 50
Cheries, 7
Strawberries, 36
Oranges, 2
Run Code Online (Sandbox Code Playgroud)

我想对文件的数字数据进行排序:

for(i=1;i<=NF;i++)j+=$i;printf "Fruit %d%s, %d\n",NR,OFS,$1,j | sort -k 2 > "numbers"; j=0"
Run Code Online (Sandbox Code Playgroud)

为了运行 awk 脚本,我运行以下命令:

awk -f numbers fruit
Run Code Online (Sandbox Code Playgroud)

数字文件的内容与水果相同,但它的第一个和第二个字段被复制到数字文件中。

gle*_*man 5

GNU awk 为您提供了一种巧妙的方法来控制遍历数组的方式:请参阅控制数组遍历控制扫描

gawk -F', ' '
    {fruit[$1] = $2}
    END {
        OFS = FS

        printf "\nordered by fruit name\n"
        PROCINFO["sorted_in"] = "@ind_str_asc"
        for (f in fruit) print f, fruit[f]

        printf "\nordered by number\n"
        PROCINFO["sorted_in"] = "@val_num_desc"
        for (f in fruit) print f, fruit[f]
    }
' fruit
Run Code Online (Sandbox Code Playgroud)

产出

ordered by fruit name
Apples, 12
Cheries, 7
Oranges, 2
Pears, 50
Strawberries, 36

ordered by number
Pears, 50
Strawberries, 36
Apples, 12
Cheries, 7
Oranges, 2
Run Code Online (Sandbox Code Playgroud)