我正在寻找一个命令,帮助我在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
如果我删除“”,它在所有情况下都不会给我任何输出。
答案 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
格式扩展到当前日期。 ! -newermt
是find
选项,用于查找早于指定日期的文件-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
。