Вывод результатов из cat в разные файлы с именами, указанными в массиве - PullRequest
0 голосов
/ 29 марта 2020

Я бы хотел сделать 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.

1 Ответ

0 голосов
/ 29 марта 2020

Вы не можете перенаправить вывод таким образом, вывод представляет собой поток символов, и перенаправление не может знать, когда переключиться на следующий файл. Вам нужно al oop поверх входных файлов. Предполагая, что имена файлов не содержат пробелов:

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