linux - 如何在 hdfs 命令中传递 awk 变量

标签 linux bash hadoop awk hdfs

<分区>

我正在使用以下命令列出大于 N 天的文件/目录

DATE=`date +%Y-%m-%d`
dt=`date --date "$dt" +%Y%m%d`
loop_dt=`date -I --date "$dt -1 day"`   
*** output of loop_dt = 2018-02-25***

hdfs dfs -ls r /path/ | awk '$6 < "$loop_dt"'

我知道上面的 hdfs 命令是错误的,但我想在 awk 命令中传递 loop_dt 变量,以了解早于 n 天的文件列表

注意:如果我在 awk 命令中硬编码日期,我会得到结果

最佳答案

回顾一下我在评论中所说的话,您需要修复您的 awk命令如下:

$ cat file
2015-08-01
2015-08-13

$ awk -v var="2015-08-12" '{if( $1 < var"") print}' file                                                                                       
2015-08-01

替换2015-08-12通过你的 shell 变量 "$loop_dt"它应该有效。

解释:

  • 使用此语法 awk -v awkVarName="$shellVariable" 'BEGIN {print awkVarName}'将变量传递给 awk
  • if( $1 < var"") ""强制进行字符串比较。

关于linux - 如何在 hdfs 命令中传递 awk 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48982422/

相关文章:

linux - 下载文件并从 Bash 脚本文件解压缩

linux - 从 ls 中提取子字符串

bash - 在脚本中使用 sed 将文件内容替换为行

bash - 在 mac bash 终端中使用 shell 命令时出现 "Illegal Byte sequence"错误

java - Mapreduce 写入名称中有空格的目录

java - java实现hbase的compareFilter

linux - 创建目录作为 ssh 链接

python - 在 Linux 上重定向 `stdin`?还是我做错了?

linux - bash online - 如何退出 flow -ing 输出

java - HDFS - 设置竞争条件