在awk中使用if与今天的日期相比较

时间:2014-05-23 20:47:58

标签: bash awk amazon-s3

我正在寻找一个命令,帮助我在awk中使用它并将其等同于当前日期。

A / B文件夹包含不同日期的文件。我需要在脚本运行时过滤掉当天的文件

A)提供包含所有日期的输出

date=`date +"%Y-%m-%d"`    

s3cmd ls --recursive  s3://A/B/ | grep A-B | grep .tar | awk '{  if ($1 -eq "$date" )  print $1"  "$2 "  " $3 "  " $4 }' | sort -r

B)将包含“$ date”日期的$ 1替换为所有

date=`date +"%Y-%m-%d"`    

s3cmd ls --recursive  s3://A/B/ | grep A-B | grep .tar | awk '{  if ($1 = "$date" )  print $1"  "$2 "  " $3 "  " $4 }' | sort -r

C)不提供任何输出。留空

date=`date +"%Y-%m-%d"`    

s3cmd ls --recursive  s3://A/B/ | grep A-B | grep .tar | awk '{  if ($1 == "$date" )  print $1"  "$2 "  " $3 "  " $4 }' | sort -r

如果我删除“”,它在所有情况下都不会给我任何输出。

3 个答案:

答案 0 :(得分:1)

shell不会在双引号内替换变量。您应该从shell变量中分配一个awk变量。此外,相等比较为==,而非-eq=

awk -v date="$date" '$1 == date { print $1"  "$2 "  " $3 "  " $4 }'

答案 1 :(得分:1)

你真的不需要awk。只需使用find并说

即可
find /path/to/search/ -type f ! -newermt $(date +"%Y-%m-%d")
  • $(..)是命令替换,它将以YYYY-MM-DD格式扩展到当前日期。
  • ! -newermtfind选项,用于查找早于指定日期的文件
  • -type f只会查找文件

答案 2 :(得分:0)

awk不是shell。它是一个完全独立的工具,具有自己的语法和功能。因此,您不应期望能够在awk脚本中使用shell变量或shell语法。试试这个:

s3cmd ls --recursive  s3://A/B/ |
awk -v date="$date" -v OFS="  " '/A-B/ && /.tar/ && ($1 == date) { print $1, $2, $3, $4 }' |
sort -r

你可能实际上意味着\.tar而不是.tar,而正如@jaypal所说,这是find的工作,而不是ls管道awk