使用Bash将矢量分类为数字,然后是字母

时间:2014-02-07 21:15:57

标签: bash sorting

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

中号
2
10个
X

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

2
10个
中号
X

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

提前致谢。

4 个答案:

答案 0 :(得分:2)

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

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

可能需要GNU排序

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以按字母对其进行一次排序,然后按编号对其进行排序。所以......

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

答案 3 :(得分:0)

很长,但是:

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