Linux 在bash中将stdout写入两个不同的文件(一个覆盖,一个附加)
我有一系列的实验,它们是由Linux 在bash中将stdout写入两个不同的文件(一个覆盖,一个附加),linux,bash,stdout,tee,Linux,Bash,Stdout,Tee,我有一系列的实验,它们是由小组和数字组织的。我有三个不同的组,对于number,我希望运行两个不同的实验。换句话说,我要进行以下实验: group A, 1 group A, 2 group B, 1 group B, 2 group C, 1 group C, 2 每次我运行一个将实验结果打印到标准输出的程序时,我都希望这些结果被放入一个文本文件中。我希望为每个组和编号组合的结果创建一个单独的文本文件,并且为每个组的结果创建一个单独的文本文件,其中包含所有编号运行 下面是我运行所有这些实验的
小组
和数字
组织的。我有三个不同的组
,对于number
,我希望运行两个不同的实验。换句话说,我要进行以下实验:
group A, 1
group A, 2
group B, 1
group B, 2
group C, 1
group C, 2
每次我运行一个将实验结果打印到标准输出的程序时,我都希望这些结果被放入一个文本文件中。我希望为每个组
和编号
组合的结果创建一个单独的文本文件,并且为每个组
的结果创建一个单独的文本文件,其中包含所有编号
运行
下面是我运行所有这些实验的bash脚本:
#!/bin/bash
groups="A B C"
numbers="1 2"
rm *.txt
for g in $groups; do
# Set the group settings based on the value of $g
for n in $numbers; do
# Set the number settings based on the value of $n
./myprogram >> $g-results.txt
done
done
使用上述代码,我最终得到以下文本文件:
A-results.txt
B-results.txt
C-results.txt
A-1-results.txt
A-2-results.txt
B-1-results.txt
B-2-results.txt
C-1-results.txt
C-2-results.txt
但我也想要文本文件:
A-results.txt
B-results.txt
C-results.txt
A-1-results.txt
A-2-results.txt
B-1-results.txt
B-2-results.txt
C-1-results.txt
C-2-results.txt
如何更改我的
/myprogram…
命令,以便将输出连接(>
)到一个文本文件(就像我已经在做的)并将(
)覆盖到另一个文本文件(就像我想做的)?作为一种简单的方法,而不是:
./myprogram >> $g-results.txt
您可以捕获一次输出并写入两次:
$out=$(./myprogram)
echo "$out" >> "$g-results.txt"
echo "$out" > "$g-$n-results.txt"
使用
tee
命令将标准输出“拆分”到多个目标
./myprogram | tee "$g-$number-results.txt" >> $g-results.txt
tee
将其标准输入写入一个(或多个)命名文件以及标准输出,因此上述管道将myprogram
的每个实例的输出写入一个唯一的每次运行输出文件,并将所有$g
运行的输出聚合到一个文件
您还可以聚合内部for
循环的输出,而不是附加到文件中
for g in $groups; do
# Set the group settings based on the value of $g
for n in $numbers; do
# Set the number settings based on the value of $n
./myprogram | tee "$g-$number-results.txt"
done > "$g-results.txt"
done
由于您已经列出了
tee
命令:
./myprogram | tee $g-$n-results.txt >> $g-results.txt
使用发球台两次
myprog | tee-appendFile.txt | tee overwriteFile.txt
就像这样,它也会打印到标准输出。如果你想的话,你可以在末端添加一些东西,将其连接到其他东西上
如果您需要执行任何操作,sed是您的朋友。谢谢,但我需要在运行时扫描和监视文本文件。(我没有提到这一点,但这是我的一个要求。)哦,好吧,在这种情况下,基于
tee
的答案可能对你更合适,我想。太好了!不知道循环聚合的。我也不知道tee做了多次写入。是的,但我相信如果你想一个tee追加(-a),另一个覆盖,你需要这样做。