获取变量(bash)中文件中最年轻和最早的日期

时间:2017-06-15 12:46:03

标签: bash file date lookup

是否可以从大文件中提取最年轻和最早的时间并放入变量?例如(原始文件没有空格):

2020747462 170615095632 984732454353
2020747462 170615143620 278645456456
2020747462 170615103212 192040326564
2020747462 170615035912 139583824564

并获取

Youngest: 170615035912
Oldest  : 170615143620

时间格式(yymmddhhmmss)位于行中的固定位置。我在互联网上环顾四周,但找不到任何例子或类似的东西。我希望有人知道如何在bash中实现这一目标。

3 个答案:

答案 0 :(得分:1)

cut -c11-22 file \
| sort \
| sed -n -e '1{s/^/Youngest: /;p};${s/^/Oldest  : /;p}'

第一行从文件中提取字符11-22,下一行对输出行进行排序,最后一行打印第一行和最后一行,前面加上最年轻和最旧的字。

答案 1 :(得分:0)

perl -a -ne '
   BEGIN{$y=9}
   next if $.==1 || $.==2 || eof; # to skip first second and last line
   $y=$F[1] if $F[1] lt $y;
   $o=$F[1] if $F[1] gt $o;
   END{print "Youngest: $y\nOldest  : $o\n"}' <file

答案 2 :(得分:0)

为了完整性,以下是awk的示例:

awk '{ dayt[NR]=$2 } END { asort(dayt,dat1);printf "Youngest:\t"dat1[1]"\nOldest:\t"dat1[NR]"\n" }' filename

如果filename是有问题的文件,请将第二列放入名为dayt的数组中,然后使用asort按值对其进行排序,将结果放在dat1中。最后打印第一个和最后一个条目(由NR表示的最后一个条目索引)