0

我正在测试使用通配符进行重定向。就像是:

./TEST* < ./INPUT* > OUTPUT

有人有什么建议吗?谢谢。

4

3 回答 3

3

假设您有以下 5 个文件:TEST1TEST1INPUT1INPUT2OUTPUT. 命令行

./TEST* < ./INPUT* > OUTPUT

将扩大到

./TEST1 ./TEST2 < ./INPUT1 ./INPUT2 > OUTPUT.

换句话说,您将./TEST1使用 2 个参数 ( ./TEST2, ./INPUT2) 运行该命令,其输入重定向自./INPUT1,其输出重定向至OUTPUT

要解决您可能尝试做的事情,您只能使用输入重定向指定单个文件。TEST要从这两个文件发送输入INPUT*,您需要使用类似以下的内容,使用进程替换:

./TEST1 < <(cat ./INPUT*) > OUTPUT

TEST*要在所有匹配的输入文件上运行每个匹配的程序INPUT*,请使用以下循环。它收集所有命令的输出并将它们放入一个文件OUTPUT中。

for test in ./TEST*; do
    cat ./INPUT* | $test
done > OUTPUT
于 2013-03-09T20:50:09.667 回答
1

有一个称为 TEST* 的程序必须将各种重定向到称为 INPUT*,但问题是有许多 TEST 程序,它们都有不同的编号,例如 TEST678。我正在尝试做的是将所有随机 INPUT 文件推送到所有所有 TEST 程序中。

你可以写:

for program in TEST*            # e.g., program == 'TEST678'
do
  suffix="${program#TEST}"      # e.g., suffix == '678'
  input="INPUT$suffix"          # e.g., input == 'INPUT678'
  "./$program" < "$input"       # e.g., run './TEST678 < INPUT678'
done > OUTPUT
于 2013-03-09T21:04:03.510 回答
0
for test in ./TEST*; do
 for inp in ./INPUT*; do
   $test < $inp >> OUTPUT
 done
done
于 2013-03-09T20:52:31.190 回答