在 tcsh 中,我有一个数组
set value = "-4.13 3.62 3.40 3.83 3.53 3.49 3.53 3.64 3.31 3.34 3.55 3.99 3.42 3.47 3.54 3.35 3.40 3.41 3.37 3.96 3.44 3.66 3.51 3.33 3.50 3.48 -3.38 -3.33 -3.61 -3.37 -3.92 -4.27 -3.32"
有数字。我想按绝对值对它们进行排序。我做了以下脚本,它有时有效,但不适用于这个特定的数组。
perl -e 'print join " ", sort { abs($b) <=> abs($a) } split(" ", $ARGV[0]);' "$value"
返回消息如
无法识别的开关:-4.13 3.62 3.40 3.83 3.53 3.49 3.53 3.64 3.31 3.34 3.55 3.99 3.42 3.47 3.54 3.35 3.40 3.41 3.37 3.96 3.44 3.6 6 3.51 3.33 3.50 3.48 -3.38 -3.33 -3.61 -3.37 -3.92 -4.27 -3.32 (-h 将显示有效选项).
那么 value_abs 为空。您能帮忙解决这个问题吗?我也不确定 for 循环排序是否是一个好主意,有没有更好的解决方案?
set value_abs = `perl -e 'print join " ", sort { abs($b) <=> abs($a) } split(" ", $ARGV[0]);' "$value"`
set sorted_indices = ()
foreach element ( $value_abs )
set index = `echo "$value:q" | tr ' ' '\n' | awk -v el="$element" '{if ($1 == el) print NR}'`
set sorted_indices = ( $sorted_indices $index )
end
你需要告诉 Perl 第一个数字不是开关。使用
--
:
perl -e 'print join " ", sort { abs($b) <=> abs($a) } split(" ", $ARGV[0]);' -- "$value"