我想按照大小排序文件列表,但要将它与特定数字(另一个文件大小)进行比较,作为比较绝对距离的规则。
这必须使用bash脚本完成。
例如:
Size to compare: 5
List of files sizes: { 1, 2, 6, 10, 5 }
Result: {5, 6, 2, 1, 10 }
我远不是bash编码方面的专家,所以我很感激这里的一些帮助。
答案 0 :(得分:1)
size=5
source=(1 2 6 10 5)
for i in ${source[@]}; do j=$((i-size)); echo ${j/-/} $i; done | sort -n | cut -d " " -f 2 | tr "\n" " "
输出:
5 6 2 1 10
此解决方案还使用了chepner提到的Schwartzian变换。
答案 1 :(得分:1)
答案 2 :(得分:1)
可以从bash脚本调用Perl,因为它已经安装在任何地方。
perl -e '$n=shift; @A=split/,/,(shift); print join ", ", sort {abs($a-$n)<=>abs($b-$n)} @A' 5 1,2,6,10,5
输出:
5, 6, 2, 1, 10
$n
使用shift
设置为您的号码5
通过使用逗号分隔输入字符串作为分隔符来设置数组@A
使用自定义排序函数sort {abs($a-$n)<=>abs($b-$n)}
假设您的输入文件大小在不同的行上的变化:
printf "%d\n" 1 2 6 10 5 | perl -ne 'BEGIN{$n=shift} push @A, $_; END{print join "", sort {abs($a-$n)<=>abs($b-$n)} @A}' 5
输出:
5
6
2
1
10