【问题标题】:Naming awk outputs according to directory name根据目录名称命名 awk 输出
【发布时间】:2014-05-13 05:10:26
【问题描述】:

我有一个需要在多个目录中的每个文件上运行的 awk 脚本。如果文件路径是:

/home/user/folder1/run1/sample1/scans
/home/user/folder2/run1/sample1/scans

对于每个folder#,我只需要在run1 内的scans 文件夹上运行awk 脚本。因此,输出的唯一区别命名约定是folder#。如何根据我所在的folder# 目录将 awk 脚本命名为输出?

例如folder1.txt,然后是folder2.txt,等等?

我真的是 awk 的新手,我可以在单个文件夹中为其提供一堆 .txt 输入,但不能将其指向整批文件夹。

重新组织文件夹结构不是一种选择,因为它是协作中的共享文件系统。

【问题讨论】:

  • 我想你会想使用find 命令。

标签: bash awk


【解决方案1】:

您可以执行以下 awk 命令:

s='/home/user/folder1/run1/sample1/scans'
awk -F '/' '{for (i=1; i<=NF; i++) if ($i=="run1") print $(i-1);}' <<< "$s"
folder1

同时使用findawk

find /home/user*/run1/*/scans -type d -exec \
     awk -F '/' '{for (i=1; i<=NF; i++) if ($i=="run1") print $(i-1);}' <<< '{}' \;

【讨论】:

  • 我一直不喜欢转义分号的约定。您在命令中引用了其他所有内容,保存换行符。为什么不引用分号?
  • exec 后的反斜杠是为了避免水平滚动,而分号前的反斜杠是常规语法,它可以节省';' 的一次击键 :-)
  • 是的,但你也可以写 -F/ 而你没有
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 2018-12-07
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
相关资源
最近更新 更多