如何使用管道分隔符在unix中剪切第5个字段以及如何从该字段中查找最小日期值

时间:2013-06-27 13:56:22

标签: unix sorting awk cut

我有文件,在该文件中,第5档是日期字段。我希望剪切该字段并在该字段中找到最小值。

Pl帮助我。

我的日期格式如下:

05142013
05132013
05152013

2 个答案:

答案 0 :(得分:2)

cut总是有利于削减(显而易见)。因此,cut -f5可以成功。

关于最短日期,您可以使用sort。由于您的格式类似于MMDDYYYY,因此可以根据您可以执行的日期对其进行排序:

sort -k1.5,8                    -k1.1,2                 -k1.3,4            file
      year (5th to 8th chars)    month (first 2 chars)   day (3rd and 4th chars)

所以一起应该是

sort -k1.5,8 -k1,2 -k1.3,4 <(cut -f5 file)

测试

$ cat file
hello my name is 05142013
bye my name is 05132013
hello blabla name is 07132013
hello my name bloooo 02192013
hello you name is 05152013
hello my blabla is 05152012
$ sort -k1.5,8 -k1,2 -k1.3,4 <(cut -d" " -f5 file)
05152012
02192013
05132013
05142013
05152013
07132013

更新

作为commented by devnull,只需k1.5,8即可,因为MMDD是要排序的文本的其余部分,并且无需指定非默认顺序。

sort -k1.5,8 <(cut -f5 file)

答案 1 :(得分:1)

如果您希望完全使用GNU awk

,这将有效
awk  ' 
match($5,/(..)(..)(....)/,ldate) {
    ndate = mktime (ldate[3]" "ldate[1]" "ldate[2]" "0" "0" "0);
    fdate = (NR>1 && fdate < ndate) ? fdate : ndate
}
END {
print strftime("%d%m%Y",fdate)
}' FS="|" inputFile