我正在编写一个bash脚本,该脚本根据条目上的预设时间间隔对文本文件上的列表进行排序,在这种情况下,我有一个名为的文本文件final.txt
,其中包含以下几行:
14-Oct-2013|04:18|
14-Oct-2013|04:16|
14-Oct-2013|04:20|
14-Oct-2013|05:16|
14-Oct-2013|06:16|
我将按时间顺序依次显示从04:16到05:16的文本文件中的条目。因此它将显示如下:
14-Oct-2013|04:18|
14-Oct-2013|04:16|
14-Oct-2013|04:20|
14-Oct-2013|05:16|
并且结果不应显示最后一行,因为最后一行超出了设置的时间间隔(04:16至05:16)
我尝试了grep作为开始时间间隔,但是我不知道如何在开始时间间隔和结束时间间隔内对条目进行排序。我想再次将其传送到grep进行排序,以结束间隔时间,但是,我知道,这将什么也不显示
无论如何,这是我的代码:
cat final.txt | grep $DATE_TO_SORT | sort | grep $HOUR_TO_SORT | sort
这里有人解决方案吗?将不胜感激
由于perl
可以在任何Unix风格下使用,并且您可以从命令行使用它,因此我将以这种方式使用它:
$ perl -n -e 'print "$_" if (/(.+)\|(.+)\|/ && $1 eq "14-Oct-2013" && $2 >= "04:18" && $2 <= "05:16")' | sort
14-Oct-2013|04:16|
14-Oct-2013|04:18|
14-Oct-2013|04:20|
14-Oct-2013|05:16|
这可能是最简单的:
$ perl -n -e 'print $_ if ($_ ge "14-Oct-2013|04:16" && $_ lt "14-Oct-2013|05:17")' | sort
14-Oct-2013|04:16|
14-Oct-2013|04:18|
14-Oct-2013|04:20|
14-Oct-2013|05:16|
要读取sh vars,您只需使用正确的引号和$,以便外壳程序可以扩展变量,这里有两种情况使用单引号或双引号来包含perl参数:
$ FROM="14-Oct-2013|04:16"
$ TO="14-Oct-2013|05:17"
$ perl -n -e 'print $_ if ($_ ge "'$FROM'" && $_ lt "'$TO'")' | sort
or
$ perl -n -e "print \$_ if (\$_ ge '$FROM' && \$_ lt '$TO')" | sort
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句