我想从这样的.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日
答案 0 :(得分:2)
据我所知,在我的简短实验中,您不需要gsub
,因为gawk
可以按字词顺序比较字符串(如果您的日期为YYYY-MM-DD
和LANG=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
看起来像你想要的我。
其余代码会尝试分配给dateA
和dateB
,但不会在任何地方使用它。此外,您似乎错过了$()
:如果您打算将日期命令的结果放入dateA
,请使用dateA=$(date -d "$2" +%Y%m%d)
,但假设您有YYYY文件中的-MM-DD,dateA=$(date -d "$2" +%Y-%m-%d)
看起来更像是一个更好的计划。