如何根据行中的子字符串对行进行排序

时间:2014-05-07 11:13:00

标签: linux shell awk sed ash

我有以下输出:

aaa=12
bbb=124
cccc=1
dddd=15

我想根据value.s对上面的行进行排序,所以输出应该如下所示:

$ cat file | awk_or_sed_or_any_command
cccc=1
aaa=12
dddd=15
bbb=124

更新

我尝试了以下命令:

$ cat file | awk -F '=' '{print $2"="$1}' | sort |  awk -F '=' '{print $2"="$1}'

但它太长了。

还有其他建议比上述建议更好吗?

注意:我的linux使用busybox中的排序,它只支持以下选项:

$ sort --help
BusyBox v1.19.4 (2014-04-04 18:50:39 CEST) multi-call binary.

Usage: sort [-nru] [FILE]...

Sort lines of text

        -n      Sort numbers
        -r      Reverse sort order
        -u      Suppress duplicate lines

2 个答案:

答案 0 :(得分:6)

使用以下命令

sort -n -t = -k 2 your_file

给了我

alex@rhyme ~ $ ash
$ cat <<EOF | sort -n -t = -k 2
> aaa=12
> bbb=124
> cccc=1
> dddd=15
> EOF 
cccc=1
aaa=12
dddd=15
bbb=124
$ which sort
/usr/bin/sort
$ LANG=C sort --version
sort (GNU coreutils) 8.21
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.

检查sort manpage其他sort选项

答案 1 :(得分:0)

sed -e 's/=\(.*\)$/=000000\1_\1/;s/=0*\([0-9]\{7\}\)_/=\1_/' YourFile | sort | sed -e 's/=[0-9]_/=/'

准备一个基本的sort而不是数字,也不是采取列,而不是以原始形式放回