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
会员注册
会员登录
个人空间