首页 > 解决方案 > 在两个文件中使用 awk 将 1 列匹配到另一列,然后对匹配的记录进行日期减法

问题描述

在两个文件中使用awk匹配 1 列到另一列,然后对匹配的记录进行日期减法(以天为单位)。

假设我有两个文件

文件1:

123,2-jul-2016
124,2-jul-2018

文件2:

123,2-jul-2015
124,2-jul-2017

如果匹配,那么给我输出为

123,366
124,366

谢谢您的帮助

标签: dateunixawk

解决方案


请您尝试以下操作。

awk '
BEGIN{
  FS=OFS=","
  num=split("jan,feb,mar,apr,may,jun,jul,aug,oct,nov,dec",month,",")
  for(i=1;i<=num;i++){
    daymonth[month[i]]=i}
}
FNR==NR{
  a[$1]=$2
  next
}
($1 in a){
  split($2,array2,"-")
  split(a[$1],array1,"-")
  print $1,(mktime(sprintf("%d %d %d 0 0 0 0",array2[3],daymonth[array2[2]],array2[1]))-\
            mktime(sprintf("%d %d %d 0 0 0 0",array1[3],daymonth[array1[2]],array1[1])))\
                  /86400
}'  Input_file2   Input_file1

推荐阅读