按括号内的数字排序

时间:2014-08-16 14:32:04

标签: javascript shell sorting applescript

初始数据:

bla bla [200] bla bla
bla [100] bla bla
bla bla bla bla [400]
bla bla [150] bla bla

所需数据:

bla bla bla bla [400]
bla bla [200] bla bla
bla bla [150] bla bla
bla [100] bla bla

通过javascript,shell脚本或AppleScript。

谢谢。

4 个答案:

答案 0 :(得分:4)

使用正则表达式从行中提取括号中的数字,并在sort()中使用该数字。

var lines = [
    'bla bla [200] bla bla',
    'bla [100] bla bla',
    'bla bla bla bla [400]',
    'bla bla [150] bla bla'
];

function getNumber(line) {
    return parseInt(line.match(/\[(\d+)\]/)[1], 10);
}
lines = lines.sort(function(a, b) {
    return getNumber(b) - getNumber(a);
});

答案 1 :(得分:1)

你可以使用shell的sort选项-r进行"反向"和-g用于"通用数字",例如

$ echo "bla bla [200] bla bla
  bla [100] bla bla
  bla bla bla bla [400]
  bla bla [150] bla bla" | sort -rg

返回

bla bla bla bla [400]
bla bla [200] bla bla
bla bla [150] bla bla
bla [100] bla bla

答案 2 :(得分:1)

我认为rthbound的解决方案很整洁,所以我在10.6.8上试了一下它确实有效。但当我改变文本时,它会崩溃。

echo "bla bla [200] bla bla
bla [100] bla bla asdf asdf asdf 
sdblyya bla bla bla [400] asdf sadf wer
blasa bla [150] bla bla" | sort -g

给出,

bla [100] bla bla asdf asdf asdf 
bla bla [200] bla bla
blasa bla [150] bla bla
sdblyya bla bla bla [400] asdf sadf wer

所以我不确定那里发生了什么。相反,我尝试了一种不同的方法,就像这样。

echo "bla bla [200] bla bla
bla [100] bla bla asdf asdf asdf 
sdblyya bla bla bla [400] asdf sadf wer
blasa bla [150] bla bla" | perl -ne 'print "$1:$_" if /(\d+)/' | sort -n | cut -d':' -f2

它将数字拉出并将它们放在句子前面,冒号作为分隔符。然后以数字方式对它们进行排序,最后删除前导数字和冒号。

希望有所帮助。

答案 3 :(得分:0)

2个选项:

sort -t'[' -k2nr file

gawk -F'[][]' '
    {x[$2] = $0} 
    END {PROCINFO["sorted_in"] = "@ind_num_desc"; for (y in x) print x[y]}
' file