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)
数字文件的内容与水果相同,但它的第一个和第二个字段被复制到数字文件中。
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)