如何将shell变量传递给awk?
我有以下简单的脚本。但是,它错误地将计数器结果设为0如何将shell变量传递给awk?,awk,Awk,我有以下简单的脚本。但是,它错误地将计数器结果设为0 #!/usr/local/bin/bash f_name="test.stat" S_Date="2012-02-10" E_Date="2012-02-13" awk 'BEGIN {FS="\t";s_time = mktime($S_Date);e_time = mktime($E_Date);counter=0} {if ($1 >= s_time && $1 <= e_time) counte
#!/usr/local/bin/bash
f_name="test.stat"
S_Date="2012-02-10"
E_Date="2012-02-13"
awk 'BEGIN {FS="\t";s_time = mktime($S_Date);e_time = mktime($E_Date);counter=0}
{if ($1 >= s_time && $1 <= e_time) counter++}
END{print counter}' $f_name
#/usr/local/bin/bash
f_name=“test.stat”
S_Date=“2012-02-10”
E_Date=“2012-02-13”
awk'BEGIN{FS=“\t”;s_time=mktime($s_Date);e_time=mktime($e_Date);counter=0}
{如果($1>=s_time&&$1,awk
命令是单引号,因此$s_DATE
和$E_DATE
是按字面意思理解的。您有几个选项:
#!/usr/local/bin/bash
f_name="test.stat" S_Date="2012-02-10" E_Date="2012-02-13"
awk 'BEGIN {FS="\t";s_time = mktime('"$S_Date"');e_time = mktime('"$E_Date"');counter=0} {if($1 >= s_time && $1 <= e_time) counter++} END{print counter}' "$f_name"
!/usr/local/bin/bash
f_name=“test.stat”S_Date=“2012-02-10”E_Date=“2012-02-13”
awk'BEGIN{FS=“\t”;s_time=mktime(“$s_Date”);e_time=mktime(“$e_Date”);counter=0}{如果($1>=s_time&&1),你最好在unix.stackexchange.com上问这个问题,它是一个awk
程序,而且是关于SO的主题。严肃地说:这个问题怎么会有将近14000个视图,只有两张选票?(我很好奇为什么有人只有不到100个代表和2个金徽章。这就是为什么。)我怀疑这是因为人们来到这里希望对多种情况有一些了解,结果证明问题实际上是关于变量引用。你也可以将shell变量作为awk变量传递:awk-F'\t'-v s_date=“$s_date”-v e_date=“$e_date””开始{s_time=mktime(s_date);e_time=mktime(e_date);…
(这是我最喜欢的;)@Kevin,前两个选项都返回0,尽管数据文件的日期在该范围内@glenn jackman,但您的建议会收到语法错误消息,它应该在引号内还是在bash脚本中调用?
#!/usr/local/bin/bash
f_name="test.stat" S_Date="2012-02-10" E_Date="2012-02-13"
awk "BEGIN {FS=\"\\t\";s_time = mktime($S_Date);e_time = mktime($E_Date);counter=0} {if(\$1 >= s_time && \$1 <= e_time) counter++} END{print counter}" "$f_name"
#!/usr/local/bin/bash
f_name="test.stat" S_Date="2012-02-10" E_Date="2012-02-13"
awk "$f_name" <<EOF
BEGIN {
FS="\t"
s_time = mktime($S_Date)
e_time = mktime($E_Date)
counter=0
}
{ if(\$1 >= s_time && \$1 <= e_time) counter++ }
END{print counter}
EOF