赞助连接

赞助连接

阅 读 文 章

[求助]如何用awk按要求提取下列的数据?

[来源:网上转载 (http://bbs.chinaunix.net) | 作者:网友(网络转载) | 时间:2008-06-14 | 浏览:人次 ]

test文件的内容如下

QUOTE: 101/4503930/sql101. 2008-06-09 -05.tar.gz
101/4731463/sql101. 2008-06-10 -05.tar.gz
101/4902005/sql101. 2008-06-11 -05.tar.gz
101/4845901/sql101. 2008-06-12 -05.tar.gz
101/5041102/sql101. 2008-06-13 -05.tar.gz
139/4594157/web139-postcode. 2008-06-07 -04.tar.gz
139/5470760/web139-telecode. 2008-06-07 -04.tar.gz
139/4594157/web139-postcode. 2008-06-08 -04.tar.gz
139/5470766/web139-telecode. 2008-06-08 -04.tar.gz
139/4594157/web139-postcode. 2008-06-09 -04.tar.gz
139/5470754/web139-telecode. 2008-06-09 -04.tar.gz
139/4594157/web139-postcode. 2008-06-10 -04.tar.gz
139/5470765/web139-telecode. 2008-06-10 -04.tar.gz
139/4594157/web139-postcode. 2008-06-11 -04.tar.gz
139/5470764/web139-telecode. 2008-06-11 -04.tar.gz
139/4594157/web139-postcode. 2008-06-12 -04.tar.gz
139/5470756/web139-telecode. 2008-06-12 -04.tar.gz
139/4594157/web139-postcode. 2008-06-13 -04.tar.gz
139/5470752/web139-telecode. 2008-06-13 -04.tar.gz
142/83607928/142wiki027. 2008-06-09 -06.tar.gz
142/83607935/142wiki027. 2008-06-10 -06.tar.gz
142/83608034/142wiki027. 2008-06-11 -06.tar.gz
142/83607820/142wiki027. 2008-06-12 -06.tar.gz
文件中每一行以“/”为分隔符被分为三个字段,第一个字段表示目录,第二个字段表示文件大小,第三个字段表示目录中的文件名。

现在要求根据文件名中的日期(如红色标记部分),提取出 每个目录 中日期最早和最晚的记录,日期最早或者最晚的文件如果有多个,也一样需要提取出来,所以最后得到的预想结果如蓝色标记的部分,请问用awk该怎么来做呢?自己琢磨了半天,没有搞定,就来论坛求助各位了。

最后结果就是:

QUOTE:101/4503930/sql101.2008-06-09-05.tar.gz
101/5041102/sql101.2008-06-13-05.tar.gz
139/4594157/web139-postcode.2008-06-07-04.tar.gz
139/5470760/web139-telecode.2008-06-07-04.tar.gz
139/4594157/web139-postcode.2008-06-13-04.tar.gz
139/5470752/web139-telecode.2008-06-13-04.tar.gz
142/83607928/142wiki027.2008-06-09-06.tar.gz
142/83607820/142wiki027.2008-06-12-06.tar.gz





[Copy to clipboard] [ - ]CODE:awk 'BEGIN{FS="[/.]";}
{d=$(NF-2);sub(/...$/,"",d);a[$1,d]=a[$1,d]$0"\n";}
NR==1{key=$1;dmin=d;dmax=d;}
NR>1&&$1!=key{printf a[key,dmin] a[key,dmax];dmin=d;dmax=d;}
{key=$1;dmin=(d<dmin)?d:dmin;dmax=(d>dmax)?d:dmax}
END{printf a[key,dmin] a[key,dmax];}'  数据文件
以上代 *** 是建立在数据文件以第一字段进行排序的基础上的。




练习:

假设urfile已经按第一字段排序:

[Copy to clipboard] [ - ]CODE: awk -f scr.awk urfile
scr.awk:

[Copy to clipboard] [ - ]CODE:BEGIN { FS = "/" }

{
  if ( $1 != F1)
  {
    if ( NR != 1 )
    {
       print max
       print min
TAG标签 : 下列 数据 提取 要求 如何 求助 -04.tar.gz if Date cur

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表
网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.