【问题标题】:awk command to combine multiple parametersawk 命令组合多个参数
【发布时间】:2019-01-19 21:19:20
【问题描述】:

我正在尝试编写一个 awk 命令,但遇到了一些困难。我的任务是获取 hdfs 目录中的文件列表,然后将每个文件复制到目标目录。到目前为止,我有这个:

hls $files_v | grep $rdir | awk '{print "hdfs dfs -cp "$NF}'
  • hls 只是“hdfs dfs -ls”的别名
  • $files_v 是我的源目录
  • $rdir 是按日期字符串划分的 hadoop 分区,在本例中为 2019-01-09

我需要将我目前拥有的内容与我的目标目录结合起来,所以我最终得到了多行内容为“hdfs dfs cp /some/source/file /some/target/directory/path.

我还有另一个变量 $tgt_dir",其中包含我要复制到的特定目录,但不明白如何将其包含在我的 awk 命令中。

我有这么多变量的原因是因为我将为源目录、分区日期和目标目录使用多个值。我认为重新定义每个变量并在我的脚本中重新使用它们会更容易。我将每个参数定义为运行时参数,如 $1、$2 等,并且可以通过这种方式在运行时更新变量。

谢谢!

【问题讨论】:

  • 问题不清楚且过于宽泛:1)请显示示例源目录结构 2)$rdir 是什么 3)预期的输出/操作是什么。具体问题是什么?
  • 我在原始帖子中定义了“$rdir”。是的,你是对的,我从来没有问过一个具体的问题。我应该问“如何将多个变量传递给 awk,将它们组合成一个输出语句”。或者接近那个的东西,无论如何。感谢您指出我帖子的不足之处;这将帮助我在未来更清楚!

标签: hadoop awk hdfs


【解决方案1】:

试试这样的:

files_v=/the/source/path
rdir=2019-01-09
tgt_dir=/the/target/path
hls $files_v | grep $rdir | awk -v tgt_dir=$tgt_dir '{print "hdfs dfs -cp",$NF,tgt_dir}'

顺便说一句,你为什么不直接使用以下?

hdfs dfs -cp /the/source/path/2019/01-09/* /the/target/path/.

【讨论】:

  • 非常感谢您的帮助!您提供的解决方案完美运行。我不想使用您的第二个建议的原因是因为我的 Source Dir 是路径“/archive/abcxyz_dir”,其中包含许多不同类型和日期的文件。我需要在 1 个目录中识别特定文件以及这些文件的某些日期。所以我的源路径、日期和目标路径需要一些灵活性。这有意义吗?
猜你喜欢
  • 1970-01-01
  • 2014-08-13
  • 2016-07-31
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2023-03-22
  • 2014-02-08
相关资源
最近更新 更多