【问题标题】:'Exec' parameter with 'echo' and 'awk' filter带有“echo”和“awk”过滤器的“Exec”参数
【发布时间】:2023-11-08 01:54:01
【问题描述】:

我想在 ksh 脚本中使用这一行:

find . -type f -exec echo "{} $comment" | awk '{printf "%-30s %s", $1, $2}' \;

没有 awk,这条线工作得很好:

find . -type f -exec echo "{} $comment" \;

当我添加 awk 来制作列时,我遇到了这个错误:

awk: fatal: cannot open file `;' for reading (No such file or directory)
find: missing argument to `-exec'

我找不到好的语法。各位大侠有什么想法吗?
谢谢!

【问题讨论】:

    标签: shell awk exec echo ksh


    【解决方案1】:

    有两件事我实际上无法理解。

    1. \; 代表什么?

    2. - 中的printf "%-30s %s", $1, $2 是什么?

    不管怎样,试试吧。

    $> find . -type f -exec echo "{} $comment" \; | awk '{printf "%30s %s\n", $1, $2}'
    

    【讨论】:

    • 谢谢!我将 awk 过滤器放在\; 之后,它可以工作。 - 用于对齐左侧的文本。
    • \; 基本上是为了让find 能够区分它正在执行的命令和它自己的参数(在这种情况下是exec)。 - 中的 "%-30s" 用于对齐。它指定用于输出的左调整。 :)
    【解决方案2】:

    这可能对你有用:

     find . -type f -exec printf "%-30s %s\n" "{}" "$comment" \; 
    

    【讨论】: