假设我有一个包含以下列的文件:
米
阿拉伯数字
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}}'