初始数据:
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。
谢谢。
答案 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