![如何使用 awk 打印两个文件中两个日期之间的差异](https://linux22.com/image/103134/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20awk%20%E6%89%93%E5%8D%B0%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E4%B8%A4%E4%B8%AA%E6%97%A5%E6%9C%9F%E4%B9%8B%E9%97%B4%E7%9A%84%E5%B7%AE%E5%BC%82.png)
我需要为每个唯一 ID ($1) 打印文件 1 ($2) 的最早日期和文件 2 ($2) 的日期之间的差异(以天为单位)。这样我就可以将 ID ($1) 和天数差异作为输出文件。
文件1
102 2008-06-12 11:08:12 23
105 2005-05-16 20:15:05 15
102 2009-01-30 13:16:45 38
105 2006-06-14 15:30:25 45
102 2009-04-13 24:25:30 45
105 2006-07-23 13:23:30 12
108 2004-05-21 12:25:15 15
108 2005-04-29 06:15:13 23
文件2
102 20060305 13
105 20040530 12
108 20021225 21
所需输出
102 827
105 351
108 511
答案1
无论你有GNU awk有mktime
功能
awk '
FNR == NR{
d = mktime(gensub("[-:]", " ", "g", $2 FS $3))
if(D[$1] > d || ! D[$1])
D[$1] = d
next
}
{
d = substr($2, 1, 4) FS substr($2, 5, 2) FS substr($2, 7) " 0 0 0"
printf "%i %i\n", $1, (D[$1] - mktime(d)) / 86400
}
' file1 file2
将产生
102 830
105 351
108 513
答案2
也许这会有所帮助
#!/bin/bash
#changing to stamp
stamp1=$(date -d '2008-12-12 11:08:12' +"%s")
stamp2=$(date -d '20081210' +"%s")
#st2date1=$(date --date="@$stamp1" "+%Y-%m-%d %H:%M:%S")
#st2date2=$(date --date="@$stamp2" "+%Y-%m-%d %H:%M:%S")
#echo "$st2date1 -- $st2date2"
day='86400'
if [[ "$stamp1" -gt "$stamp2" ]]; then
dif1=$(($stamp1-$stamp2))
dif=$(( $dif1 / $day ))
echo "Diffrent = $dif days"
else
dif1=$(($stamp2-$stamp1))
dif=$(( $dif1 / $day ))
echo "Diffrent = $dif days"
fi