sh/bash/dash/ksh/zsh等Shell脚本
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#31
帖子
由 fnan » 2011-07-09 22:52
换个写法:
代码: 全选
cat n.t
345 7657 7.78 12345678.123456789123456789123456789
435.5667 -5656.676767 -565567.56576767676
32455.45 -12345678.123456789123456789123456789
grep -o '\-*[0-9\.]*' n.t|sort -n|(a=($(sed -n '1p;$p'|xargs));if [[ ${a[0]/-/} == ${a[1]/-/} ]];then echo ${a[*]};else echo ${a[1]};fi)#这样有漏洞。
改一改:
grep -o '[^ ]*' n.t|sort -nu|sed -n 's/\(^\|-\)/x\1x/;1p;$p'|(a=($(sort -tx -nk3));if [[ ${a[0]/-} == ${a[1]/-} ]];then echo ${a[*]//x};else echo ${a[1]//x};fi)
-12345678.123456789123456789123456789 12345678.123456789123456789123456789
cat n.t|perl -lane '$max=abs($F[1]) if abs($F[1])>$max;END{print$max}'
12345678.1234568
这是什么情况呢?
上次由
fnan 在 2011-07-15 7:24,总共编辑 1 次。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
gzbao9999
- 帖子: 627
- 注册时间: 2008-11-08 18:34
#32
帖子
由 gzbao9999 » 2011-07-14 14:58
如果关心这个绝对值最大值对应的是正数or负数
代码: 全选
grep -Po '[-\d\.]+' file|sort -nr|sed -n '1p;$p;'
不关心的话
代码: 全选
grep -Po '[\d\.]+' file|sort -nr|head -1
气血鼓荡,身体发胀,偶飘上头,三时舒畅
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#33
帖子
由 fnan » 2011-07-14 21:12
kose5@kose5-Aspire-4552:~$ cat n.t
345 7657 7.78 12345678.123456789123456789123456789
435.5667 -5656.676767 -565567.56576767676
32455.45 -12345678.1234567891234567891234567891
kose5@kose5-Aspire-4552:~$ grep -Po '[-\d\.]+' n.t|sort -nr|sed -n '1p;$p;'
12345678.123456789123456789123456789
-12345678.1234567891234567891234567891
话说perl不是这么用的,认真对待perl好不好?
(觉得有必要翻翻perl基础教程以展示一下perl的好处)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#34
帖子
由 fnan » 2011-07-15 4:53
比较严谨的方法:
cat n.t
345 7657 7.78 12345678.123456789123456789123456789
435.5667 -5656.676767 -565567.56576767676
32455.45 -12345678.1234567891234567891234567891
set $(sed 's/\(-*\)\([0-9.]*\)/\nx\1x\2/g' n.t|sort -tx -nrk3|uniq|head -2);[ ${1//?(-|${2/-})} ] && echo ${1//x} || echo ${*//x}
-12345678.1234567891234567891234567891
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。