如何在bash中使用awk比较日期

问题

有一个文件每行包含了一些信息,其中一个字段是生日。我想打印在指定一个日期之后日期那些行。我使用如下awk命令:

awk -F '|' 'FNR>1 $dateA<=$5 {print $1" "$2" "$3" "$4" "$5" "$6" "$7" "$8}' $FILE

不过似乎不行(所有行都打印了)。日期格式为YYYY-MM-DD,所以字母顺序也按时间顺序排列。
这个文件其中的一些行:

1099511628908|Chen|Wei|female|1985-08-02|2010-05-24T20:52:26.582+0000|27.98.244.108|Firefox
1099511633435|Smith|Jack|male|1981-04-19|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511635042|Kiss|Gyorgy|male|1984-09-14|2010-05-16T22:57:41.808+0000|91.137.244.86|Chrome
1099511635218|Law-Yone|Eric|male|1987-01-20|2010-05-26T20:10:22.515+0000|203.81.95.235|Chrome
1099511638444|Jasani|Chris|female|1981-05-22|2010-04-29T20:50:40.375+0000|196.223.11.62|Firefox
2199023256615|Arbelaez|Gustavo|male|1986-11-02|2010-07-17T18:53:47.633+0000|190.96.218.101|Chrome

最佳答案

其中的一种解决方法:

dateA='1985-01-01'
awk -F '|' -v '{if (FNR>1 && dateA<=$5) {print}}' "$infile"

更简洁的方法:

awk 'FNR>1 && dateA<=$5' "$infile"

或者:

awk 'FNR>1 && "'"$dateA"'"<=$5' "$infile"

标签:Bash 发布于:2019-11-13 12:06:13