将文件中字符串的字段与shell中的变量进行比较

时间:2016-05-18 11:57:41

标签: regex shell date awk compare

我有一个电话簿文件rubrica.txt,其中包含每行上的记录(姓名,姓名,电话号码,电话号码,日期,日期,以秒为单位)(每个条目用空格分隔) :

andrea mantovani 3476589456 0451234567 2016/05/16 1463419858190456946
marco verratti 1265897654 3057634987 2016/05/16 1463419948782978926
zlatan ibrahimovic 2937485929 1938472639 2016/05/16 1463420078149548084
cesc fabregas 5641287659 3456789123 2016/05/16 1463420324574207170
andrea mantovani 3402948586 0459687124 2016/05/17 1463500810082293135
marco rossi 3951326586 0458793540 2016/05/17 1463500836814967504

我希望查看输出在我插入日期后添加的所有联系人。

首先,我阅读了我想要的日期,并使用以下脚本将其转换为秒:

echo "Digit the date"
read date_jap              #read a date(yyyy/mm/dd)                     
data_sec=$(date +%s -d $data_jap)   #convert the date in sec

这部分代码功能。我解释一下要更清楚。

我不知道如何将此日期与文件rubrica.txt中的日期(最后一项)进行比较。

我用过:

cat $RUBRICA | awk '/$data_sec < \6/ { print }'

显示所有在该字段的字段6中的日期(以秒为单位)的联系人(例如,我的文件位于第一行:1463419858190456946)大于date_sec

$data_sec < \6我知道不对。我必须解决它。

1 个答案:

答案 0 :(得分:1)

假设您的日期以秒为单位是第三条记录的值并指定:

data_sec=1463420078149548084

现在我们使用-v将此值转换为awk,然后将第六个字段与其进行比较:

$ awk -v mydate="$data_sec" '$6 > mydate' rubrica.txt
cesc fabregas 5641287659 3456789123 2016/05/16 1463420324574207170
andrea mantovani 3402948586 0459687124 2016/05/17 1463500810082293135
marco rossi 3951326586 0458793540 2016/05/17 1463500836814967504

如果表达式$6 > mydate的计算结果为true,则会打印记录。