提问人:King David 提问时间:10/23/2023 最后编辑:Kostas NitafKing David 更新时间:10/24/2023 访问量:79
awk + 未传递到 awk 的导出值
awk + export value to awk not passed
问:
我正在使用以下内容(来自我之前的帖子 - 如何获取早于 30 天的文件夹列表),以便打印早于以下示例的文件夹。关于这个例子,我们在语法中将 30 天设置为常量awk
XX days
awk
awk -v d="$(date -d '-30 days' +'%F')" '$1 < d' file
2023-09-14 /user/hdfs/.sparkStaging/application_1693406696051_0046
2023-09-14 /user/hdfs/.sparkStaging/application_1693406696051_0049
2023-09-14 /user/hdfs/.sparkStaging/application_1693406696051_0051
2023-09-14 /user/hdfs/.sparkStaging/application_1693406696051_0063
2023-09-14 /user/hdfs/.sparkStaging/application_1693406696051_0064
2023-09-14 /user/hdfs/.sparkStaging/application_1693406696051_0065
2023-09-18 /user/hdfs/.sparkStaging/application_1693406696051_0107
现在我们想用一个变量替换常量,我们更改了 如下,所以我们想将值传递给 ,因为30 days
awk
day
awk
day=100
awk -v day=100 -v d="$(date -d '-day days' +'%F')" '$1 < d' file
但是我们没有看到预期的输出,设置完全不受影响。day
你能指出我的错误吗?
答:
4赞
anubhava
10/23/2023
#1
awk -v day=100
当您使用上述 awk 命令行参数时,您声明了一个变量,其中包含要在命令中使用的值。day
100
awk
但是,您正在做的是在命令行上(而不是在 awk 命令中):
-v d="$(date -d '-day days' +'%F')"
这里是未知的,不会通过 shell 或 awk 扩展。days
您正在尝试的可以使用以下方式:
day=100
awk -v d="$(date -d "-$day days" +'%F')" '$1 < d' file
4赞
tripleee
10/23/2023
#2
命令替换在 Awk 运行之前运行。此外,单引号可防止 shell 对变量进行插值。
正确的代码如下所示
day=100
awk -v d="$(date -d "-$day days" +'%F')" '$1 < d' file
确保您了解 shell 变量和 Awk 变量之间的区别。shell 对 Awk 一无所知,反之亦然。(就像您不知道运行计算机的代码中变量的名称或值一样,除非它公开了一个接口来让您检查其当前状态。
评论