在awk中传递shell变量

时间:2017-08-23 12:55:11

标签: shell awk

我正在使用命令从日志文件中提取日志,并且当我通过终端

运行命令时命令正常工作
awk '/Aug 19/||/Aug 21/{a++}a; a==4{a=0}' daily_usage_report.log

这个命令给我8月19日到8月21日的数据。日志文件如下所示 -

Aug 19

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8
Line9

Aug 19

Aug 20

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8
Line9

Aug 20

Aug 21

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8
Line9

Aug 21

但是当我尝试在shell脚本中使用相同的命令并希望将shell变量传递给awk时,它不提供任何输出。我写的shell脚本是 -

#!/usr/bin/bash

echo "Please enter the Full Date [eg- Aug  2 or Aug 20]"
read -p 'From Date: ' d1var

read -p 'Till Date: ' d2var

awk -v var="$d1var" -v vari="$d2var" '/"$var"/||/"$vari" /{a++}a; a==4{a=0}' daily_usage_report.log

exit

运行此脚本不会为我提供任何输出。

请帮助纠正我的错误。

1 个答案:

答案 0 :(得分:1)

awk变量是一个与shell变量不同的野兽。

  1. 不要在awk脚本中的awk变量之前放置一个$符号。
  2. 您的日期在初始awk脚本的正则表达式条件中没有引用,因此当它们是变量时不要引用它们。正则表达式中的双引号在你的情况下不会有效。
  3. 而是尝试:

    awk -v var="$d1var" -v vari="$d2var" '/var/||/vari /{a++}a; a==4{a=0}' daily_usage_report.log