将cat的结果输出到不同的文件中,并在数组中指定名称



我想对几个文件执行cat操作,这些文件的名称存储在一个数组中:

cat $input | grep -v "#" | cut -f 1,2,3

这里数组的内容:

echo $input
1.blastp 2.blastp 3.blastp 4.blastp 5.blastp 6.blastp 7.blastp 8.blastp 9.blastp 10.blastp 11.blastp 12.blastp 13.blastp 14.blastp 15.blastp 16.blastp 17.blastp 18.blastp 19.blastp 20.blastp

这会很好地工作。现在,我正在努力将结果存储到适当的输出文件中。因此,我还想将输出存储到文件中,这些文件的名称存储在另一个数组中:

echo $out_in
1_pairs.tab 2_pairs.tab 3_pairs.tab 4_pairs.tab 5_pairs.tab 6_pairs.tab 7_pairs.tab 8_pairs.tab 9_pairs.tab 10_pairs.tab 11_pairs.tab 12_pairs.tab 13_pairs.tab 14_pairs.tab 15_pairs.tab 16_pairs.tab 17_pairs.tab 18_pairs.tab 19_pairs.tab 20_pairs.tab
cat $input | grep -v "#" | cut -f 1,2,3 > "$out_in"

我的问题是:当我不使用"时,我会得到"模糊重定向"错误。

当我使用它们时,会创建一个名为的文件

1_pairs.tab?2_pairs.tab?3_pairs.tab?4_pairs.tab?5_pairs.tab?6_pairs.tab?7_pairs.tab?8_pairs.tab?9_pairs.tab?10_pairs.tab?11_pairs.tab?12_pairs.tab?13_pairs.tab?14_pairs.tab?15_pairs.tab?16_pairs.tab?17_pairs.tab?18_pairs.tab?19_pairs.tab?20_pairs.tab

我不明白为什么读取输入数组没有问题,但输出数组却不是这样。。。

有什么想法吗?

非常感谢!D.

您不能以这种方式重定向输出,输出是一个字符流,重定向无法知道何时切换到下一个文件。您需要对输入文件进行循环。假设文件名不包含空格:

for fn in $input; do
grep -v "$fn" | cut -f 1,2,3 >"${fn%%.*}_pairs.tab"
done

最新更新