LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1314|回复: 7

求一个读文件并返回其中最大最小行的shell脚本

[复制链接]
发表于 2009-11-22 14:47:51 | 显示全部楼层 |阅读模式
我有一个文件.像下面这样:
abc6123000014
ddc6123000063
adf6123000035
dff6123000043
...
...

文件中只有00001,00006,00003,0000是有序的,请问能不能写个SHELL读这文件,并且返回其中的最小有序值和最大有序值所在的行?

新人初学,请各位大家指导一下.
发表于 2009-11-22 22:36:45 | 显示全部楼层
麻烦您能用文字描述而不是举例来表达一下吗?
回复 支持 反对

使用道具 举报

发表于 2009-11-22 22:38:27 | 显示全部楼层
nl log|sed 's/[a-zA-Z]..//'|sort -k2 -n|sed -n '1p;$p'
这样可以吗,等待别人的答案

还有整个数字为基础比较,还是0000后面的数字比较?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-23 09:03:44 | 显示全部楼层
谢谢上面的两位..

我想实现这样的操作.
对一个文件做统计,统计出文件里的最大和最小所在行.

文件描述:
a0003b
c0002d
f0005d
f0006v
a0004t
......
......
这文件每列2到5的字符是有序的数值,其他字符无序

预期结果是返回最大值所在的记录行:f0006v, 最小值所在的记录行c0002d
回复 支持 反对

使用道具 举报

发表于 2009-11-23 10:35:10 | 显示全部楼层
删除第一个字符、排序、输出与第一行及最后行所相匹配的行

相匹配的
  1. root [ ~/fnz ]0# grep `sed -e 's/^.//' data | sort | head -n 1` data
  2. c0002d
  3. root [ ~/fnz ]0# grep `sed -e 's/^.//' data | sort | tail -n 1` data
  4. f0006v
  5. root [ ~/fnz ]0#
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-11-23 22:43:18 | 显示全部楼层
读了 man sort, 这个最简单:
  1. root [ ~/fnz ]0# sort -k1.2,5 data | sed -n '1p;$p'
  2. c0002d
  3. f0006v
  4. root [ ~/fnz ]0#
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-11-24 22:35:08 | 显示全部楼层
我试了一下,sed 打印最后一行没有用 tail快 20w行的数据。。。
回复 支持 反对

使用道具 举报

发表于 2009-11-26 22:30:17 | 显示全部楼层
Post by overawe;2049576
我试了一下,sed 打印最后一行没有用 tail快 20w行的数据。。。


似乎 sed 是从头读, tail是从尾巴读。因此对于很大的文件,tail就快很多了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表