从unix中的文件中获取日期

时间:2016-03-30 16:45:06

标签: date unix awk

我想从这样的.txt文件中获取日期:

933|Mahinda|Perera|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.123|Firefox
1129|Carmen|Lepland|female|1984-02-18|2010-02-28T04:39:58.781+0000|81.25.252.111|Internet Explorer
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer
8333|Chen|Wang|female|1980-02-02|2010-03-15T10:21:43.365+0000|1.4.16.148|Internet Explorer

并将其与用户使用此命令作为输入提供的日期进行比较:

./tool.sh --born-since <dateA> --born-until <dateB> -f <file>

并打印出输入对象之间的日期行。 我使用这段代码:

dateA= date -d "$2" +%Y%m%d
dateB= date -d "$4" +%Y%m%d
echo $2

awk  -F'|' -v from=$2 -v to=$4 '{gsub("-","",$5);
          gsub("-","",from); gsub("-","",to)}
 from <= $5 && $5 <= to '  persons.dat.txt

但它打印出来: 19820529 20100101 1982年5月29日

我跑的时候 ./tool.sh-born-自1982-05-29 - 本 - 直到2010年1月1日

1 个答案:

答案 0 :(得分:2)

据我所知,在我的简短实验中,您不需要gsub,因为gawk可以按字词顺序比较字符串(如果您的日期为YYYY-MM-DDLANG=C,词汇和日期是相同的。)

所以我跑了

gawk -F'|' -v from='1982-05-29' -v to='2010-01-01' '(from<=$5) && ($5<=to)' persons.dat.txt 

得到了

933|Mahinda|Perera|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.123|Firefox
1129|Carmen|Lepland|female|1984-02-18|2010-02-28T04:39:58.781+0000|81.25.252.111|Internet Explorer
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer

看起来像你想要的我。

其余代码会尝试分配给dateAdateB,但不会在任何地方使用它。此外,您似乎错过了$():如果您打算将日期命令的结果放入dateA,请使用dateA=$(date -d "$2" +%Y%m%d),但假设您有YYYY文件中的-MM-DD,dateA=$(date -d "$2" +%Y-%m-%d)看起来更像是一个更好的计划。