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

如何在unix中使用管道定界器剪切第5个字段以及如何从该字段中查找最小日期值,unix,sorting,awk,cut,Unix,Sorting,Awk,Cut,我有一个文件,第五个文件是日期字段。我要切下那个域,在那个域中找到最小值 请帮帮我 我的日期格式如下: 05142013 05132013 05152013 cut总是适合切割(显而易见)。所以,cut-f5可以成功 关于最短日期,您可以使用排序。由于您的格式类似于MMDDYYYY,因此要根据您可以执行的日期对其进行排序,请执行以下操作: sort -k1.5,8 -k1.1,2 -k1.3,4 fil

我有一个文件,第五个文件是日期字段。我要切下那个域,在那个域中找到最小值

请帮帮我

我的日期格式如下:

05142013
05132013
05152013

cut
总是适合切割(显而易见)。所以,
cut-f5
可以成功

关于最短日期,您可以使用
排序
。由于您的格式类似于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)

cut
总是适合切割(显而易见)。所以,
cut-f5
可以成功

关于最短日期,您可以使用
排序
。由于您的格式类似于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)

如果您希望完全使用
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
awk'
匹配($5,/(…)(…)/,ldate){
ndate=mktime(ldate[3]“ldate[1]”ldate[2]“0”“0”“0);
fdate=(NR>1&&fdate
如果您希望完全使用
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
awk'
匹配($5,/(…)(…)/,ldate){
ndate=mktime(ldate[3]“ldate[1]”ldate[2]“0”“0”“0);
fdate=(NR>1&&fdate
一些示例数据不会影响日期字段的格式如何?一些示例数据不会影响日期字段的格式如何?有点像,@JS웃, 哈哈!我和Radiohead在一起,但我想我是在不知不觉中受到了Eminem先生的影响:)我肯定我遗漏了一些东西,但似乎
-k1,2-k1.3,4
是多余的。嗯,看看你刚才写的,我的代码有
k1。有些东西
哦,是的。这就是暗示的<代码>-k1.5,8就足够了,不是吗?这就是我想说的。哦@devnull,你完全正确。由于字符串的其余部分是
MMDD
,这是我们想要的另一个,因此没有必要像我那样用更多的
-k1.XXX
强制它。所以
-k1.5,8
完全足够了。谢谢有点,@JS웃, 哈哈!我和Radiohead在一起,但我想我是在不知不觉中受到了Eminem先生的影响:)我肯定我遗漏了一些东西,但似乎
-k1,2-k1.3,4
是多余的。嗯,看看你刚才写的,我的代码有
k1。有些东西
哦,是的。这就是暗示的<代码>-k1.5,8就足够了,不是吗?这就是我想说的。哦@devnull,你完全正确。由于字符串的其余部分是
MMDD
,这是我们想要的另一个,因此没有必要像我那样用更多的
-k1.XXX
强制它。所以
-k1.5,8
完全足够了。谢谢谢谢@Amit。。更新了解决方案。谢谢@Amit。。更新了解决方案。