从文件加载命令

从文件加载命令

是否可以将命令写入文本文件,然后将其作为文件加载到终端中?如果是的话,加载文件的命令是怎样的?谢谢。

例如文件命令:

awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2

这是因为运行 awk 程序时出现问题,该程序无法使用命令

awk -f program.awk d??.active > out

我需要对大量文件使用 program.awk ,当我无法使用 ?? 修复该命令的程序时,这对我来说似乎是更简单的解决方案。

与这个问题有关https://stackoverflow.com/questions/55313187/more-input-files-in-awk?noredirect=1#comment97356807_55313187

答案1

如果您有一个包含 shell 命令列表的文件(每行一个),那么您就有了一个 shell 脚本!您需要做的就是运行它:

sh file_commands

然而,这并不是我认为您需要的最简单的方法。如果你想运行当前目录中的program.awk每个文件,你可以简单地使用一个循环:d??.active

for file in d??.active; do awk -f program.awk "$file" > "$file".out; done

这将为 创建一个d01.active.out输出文件d01.active,为 创建一个d02.active.out文件,d02.active等等。

答案2

shell 脚本本质上是由行分隔符终止的命令列表,这些命令将被指定(或默认)解释器解释为命令列表。

要指定解释器,您的文件应以哈希邦(也称为 shebang)。

例子:

#!/bin/sh
#!/bin/bash
#!/bin/ksh
#!/bin/zsh
#!/usr/bin/env bash

注意:每个解释器都有自己的语法和规则集。无论您打算使用哪一种产品,您都应该研究其手册。


在你的 hashbang 之后,你基本上可以开始列出要在各自的行上执行的命令。

注意:这些命令会按照从上到下的顺序执行


在你的例子中你会想要这样的东西:

#!/bin/sh

awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2

然后,您必须使该文件可执行,并通过在命令行上指定该文件的完整路径或相对路径来运行它。 (或通过运行sh /path/to/file


不过,这看起来确实是一个潜在的 xy 问题,并且可能可以通过更编程的方式来处理。

例如:

#!/bin/bash

for file in d??.active; do
    n=${file:1:2}
    awk -f program.awk "$file" > "out$n"
done

相关内容