我有一个包含以下格式的行的文件:
<firstname> <lastname> <day_of_birth> <month_of_birth> <year_of_birth>
我需要显示在当前日期庆祝生日的用户。
我设法编写脚本,但只检查当天==当天。
我如何用awk写行,我检查$ 3 == day,还检查$ 4 ==月和$ 5 ==年?谢谢
# get current date: day, month, year
day="$(date +'%d')"
month="$(date +'%m')"
year="$(date +'%Y')"
birthdays=$(awk "\$3~/$day/ {print \$1, \$2;}" users.lst)
echo $birthdays
答案 0 :(得分:4)
你不能像这样在awk中包含变量。它可能会产生许多问题。您需要使用-v awk_var=$shell_var
选项将shell变量传递给awk。
您可以使用此awk命令:
awk -v d=$day -v m=$month -v y=$year '$3==d && $4==m && $5==y {print $1, $2}' users.lst
但请注意GNU awk has built-in date/time functions,你可以避免在awk之前调用date命令3次:
awk '$3==strftime("%d") && $4==strftime("%m") && $5==strftime("%Y")
{print $1, $2}' users.lst
答案 1 :(得分:4)
你没有发布任何样本输入,所以这是猜测,但这可能是你想要的:
awk -v date=$(date "+%d/%m/%Y") '$3"/"$4"/"$5 == date {print $1, $2}' file
答案 2 :(得分:3)
您可以在 awk
内的中获取当前日期,如下所示:
awk 'BEGIN {
"date +%d" | getline day
"date +%m" | getline month
"date +%Y" | getline year
}
$3==day && $4==month && $5==year {
print $1,$2
}' users.lst
答案 3 :(得分:1)
这是另一种方式:
awk '$3=="'$(date +%d)'"&&$4=="'$(date +%m)'"&&$5=="'$(date +%Y)'"{print $1,$2}' users.lst