Linux

如何使用 awk 命令計算同一文件中兩列之間的日期差?

  • December 16, 2016

我有一個多列 csv 文件,以逗號分隔,其中有兩列具有不同的日期(mm/dd/yyyy)。我將確定這兩個日期之間的區別。以下是範例:

echo filename
   001xxxc,28.2,03/04/2009,11/19/2009
   00cvbfd,34.4,03/04/2009,01/06/2010
   04rsdsd,34,12/01/2006,10/02/2001
   456dfds,40,12/01/2006,04/23/2002
   et556ss,40.8,12/01/2006,10/22/2002

我想知道無論如何使用 awk 命令來獲取日期差異。

我嘗試了這個 awk 命令,但我確定它不是正確的方法?

awk -F, '{print $1","$2","$3-$4}' filename

假設您想要天數的差異,那麼如果您有 GNU awk ( gawk),您可以執行類似的操作

gawk -F, '
 {
   split($3,a,"/"); 
   split($4,b,"/"); 
   t1 = mktime(sprintf("%d %d %d 0 0 0 0",a[3],a[1],a[2])); 
   t2 = mktime(sprintf("%d %d %d 0 0 0 0",b[3],b[1],b[2])); 
   print (t2-t1)/86400
 }
' filename
260
308
-1886
-1683
-1501

mktime參數必須是格式的字元串"YYYY MM DD HH MM SS [DST]";將可選DST標誌設置為零告訴它忽略夏令時(否則天真的除以 86400 會導緻小數天數)。

請參閱Gawk:有效的 AWK 程式,9.1.5 時間函式

引用自:https://unix.stackexchange.com/questions/330766