如何从 bash 传递参数并在 awk 中进行字符串比较?
如何将参数传递给 awk 以将字符串与管道输入进行比较? 例如,以下内容用于过滤特定文件夹下 2011 年 8 月之前创建的文件
#!/bin/bash
$FILTER_DIR=$1
# file date before it should be listed.
FILTER_BEFORE="2011-08"
# $6 in awk statement is date of file name($8)
find $1 -type f | \
sed 's/^/ls -l /g' | \
sh | \
awk ' if ( $6 le $FILTER_BEFORE ) { print $8 }'
。结果列出 $FILER_DIR 下的所有文件,而不进行过滤。 看来 AWK 没有从 bash 正确接收 $FILTER_BEFORE 。 任何评论表示赞赏!
How to pass a parameter to awk to compare the string with pipe input?
For example, followings are used to filter files created before Aug 2011 under specific folder
#!/bin/bash
$FILTER_DIR=$1
# file date before it should be listed.
FILTER_BEFORE="2011-08"
# $6 in awk statement is date of file name($8)
find $1 -type f | \
sed 's/^/ls -l /g' | \
sh | \
awk ' if ( $6 le $FILTER_BEFORE ) { print $8 }'
The result list all files under $FILER_DIR without filtering.
It seems AWK didnot receive $FILTER_BEFORE from bash properly.
Any comment is appreciated!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果使用 gawk,请将其作为参数传递
if using gawk, pass it as a parameter
您将需要使用双引号并转义其他 AWK 变量,这样它们就不会被 bash 解释。
或者,您可以仅将变量放入双引号中,这样就可以避免转义。
You will need to use double quotes and escape the other AWK variables so they don't get interpreted by bash.
Alternatively you can break out just the variable into double quotes so you can avoid escaping.
我会选择:
或者这个(仅GNU find):
I'd go with:
Or this (GNU find only):
以下语句似乎工作正常。
感谢大家的帮助。
Following statements seem work properly.
Thanks for everybody's help.