【问题标题】:Simple script that replaces a variable by a path with awk用 awk 路径替换变量的简单脚本
【发布时间】:2011-09-10 02:34:54
【问题描述】:

我正在使用服务器上的 PBS 队列。 我想自动提交几份工作 因此需要用路径替换变量。 由于不可能将论据放入 运行与队列一起运行的脚本,我想 替换通常使用的shell变量 带有硬编码参数。

我需要的是:

#! /bin/sh
#PBS -N runme_$file
#PBS -o $file.out
#PBS -e $file..err
#PBS -q batch
#PBS -j oe
#PBS -m abe
#PBS -r n
#PBS -l nodes=1:ppn=1
#PBS -l walltime=24:00:00

/home/example/proggie script $file $parameter2
echo "DONE"

用'/tmp/output'替换$file,所以应该转换成:

#! /bin/sh
#PBS -N runme_/tmp/output
#PBS -o /tmp/output.out
#PBS -e /tmp/output.err
#PBS -q batch
#PBS -j oe
#PBS -m abe
#PBS -r n
#PBS -l nodes=1:ppn=1
#PBS -l walltime=24:00:00

/home/example/proggie script /tmp/output $parameter2
/home/example2/proggie2 /tmp/output
echo "DONE"

PBS 部分很重要,因为它阻碍了参数的使用。 所以我不能只使用 $1 和 $2 并给脚本参数 它需要通过参数。相反,我必须通过 替换命令,然后我可以将它提交到排队系统。 我仍然希望能够从命令行使用脚本, 用于快速测试。

我已经尝试过使用sed,但是特殊字符的可能性 文件中发生的事情搞砸了一切。必须有更好的方法。

【问题讨论】:

  • 您的问题还不清楚。为什么你回显但忽略$1?替换$file 的值来自哪里? $parameter2 的值从何而来? PBS 在哪里运行;它似乎与问题完全相切?
  • 我把问题编辑得更清楚了。

标签: file replace sed awk


【解决方案1】:

如果您将 $file 指定为 ${file} 会怎样。然后你应该可以使用 sed。当您说“特殊字符”时,我假设您指的是其他 $ 符号。至少这是我在您发布的内容中看到的唯一内容。

【讨论】:

    【解决方案2】:

    使用sed

    sed "s%\$file%$file%" script.in > script.out
    

    使用awkgawk 或 GNU Awk):

    awk '{ gsub(/\$file/, file); print }' file="$file" script.in > script.out
    

    在这两个示例中,我假设此编辑上下文在$file 中具有正确的文件名值。我还假设脚本中没有任何其他变量,例如 $file1$filename;如果确实有这样的变量,则正则表达式必须更复杂。我还在sed 示例中假设您没有在文件名中嵌入百分比符号。

    【讨论】:

    • awk 行成功了。但是 sed 部分损坏了。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多