使用 Bash 将矢量排序为数字,然后是字母



假设我有一个包含以下列的文件:


阿拉伯数字
10

是否可以根据此列进行排序以获得:

阿拉伯数字
10

我尝试使用 -g 和 -n,但首先输出字母,然后是数字。

提前谢谢。

版本排序似乎可以做你想做的事;

sort -V <<END
M
2
10
X
END
2
10
M
X

可能需要 GNU 排序

排序可能没有这种支持。我只能想到这种作弊模式

sort -n <(awk '/^[0-9]+$/' file) && sort <(awk '!/^[0-9]+$/' file)
2
10
M
X

您可以按字母排序一次,然后按数字排序。 所以...

sort test.txt -o test.txt && sort -n test.txt -o test.txt

很长,但是:

re='^[0-9]+$'; 
while read line; 
do 
   if ! [[ $line =~ $re ]]
   then 
        printf "%d,An" "'$line"
   else 
        printf "%d,Nn" "$line"
   fi
done < file | sort -t ',' -k1n | awk -v FS=',' '{ if($2=="N"){print $1} else {printf "%cn",$1}}'

相关内容

  • 没有找到相关文章

最新更新