将 cat 的结果输出到不同的文件中,并将名称指定到数组中
Output results from cat into different files with names specified into an array
我想对几个文件执行 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"
我的问题是:
当我不使用 "" 时,我会得到 'ambiguous redirect' 错误。
当我使用它们时,将创建一个名为:
的文件
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
我想对几个文件执行 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"
我的问题是: 当我不使用 "" 时,我会得到 'ambiguous redirect' 错误。
当我使用它们时,将创建一个名为:
的文件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