如何使用带有Bash的子字符串对字符串数组进行排序

时间:2018-02-25 01:33:29

标签: arrays linux bash

我正在编写我的第一个unix bash脚本,我发现它真的很难,因为我之前从未使用过linux。这是大学的家庭作业。我尝试了很多东西,我一直在寻找几个小时,但我找不到合适的解决方案。有人可以给我一些指示,用于从数组中对字符串进行排序,如下所示:

room_100056.dat 4
room_8973.dat 2
room_7764.dat 1
room_2092.dat 20

到此:

room_7764.dat 1
room_8973.dat 2
room_10056.dat 4
room_2092.dat 20 

在对初始数组进行排序时,我正在创建一个包含已排序数据的新数组。问题是在排序数组中,数据打印如下:

room_100056.dat 
room_8973.dat
room_7764.dat 
room_2092.dat
1
2
4
20

代码:

file=$1/*.dat

count_visits=()

for room in $file
do
   visits=$(grep "<Visit>" $room | wc -l)
   filename=$(basename $room)
   count_visits+=($filename$'\t'$visits)
done

sorted_visits=($(echo ${count_visits[@]} | tr " " "\n" | sort -g))
printf '%s\n' "${sorted_visits[@]}"
exit

1 个答案:

答案 0 :(得分:1)

告诉sort以数字方式使用第二列:

printf '%s\n' "${count_visits[@]}" | sort -k2n