соответствующие файлы во время чтения с циклом for - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь объединить цикл for во время чтения команды. Если запустить один, цикл for работает как нужно:

for file in *postp*/*; 
do;
ls $file/*/*/sequences/*/*_supercontig.fasta | xargs cat > My_New_File.txt; 
done;

Тем не менее, я хочу только отслеживать файлы (* .fasta), имена которых основаны на заданном списке ввода (Files_to_cat.txt). Вот код, который я пытаюсь, но возвращает пустой файл, поэтому у меня что-то не так.

while read -r name;
do;
    for file in *postp*/*; 
    do;
    ls $file/*/*/sequences/*/"$name"_supercontig.fasta | xargs cat > My_New_File.txt; 
    done;    
done<Files_to_cat.txt 

Обратите внимание, что список в Files_to_cat.txt соответствует префиксу * _supercontig.fasta

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 ноября 2018

Я не могу обнаружить ошибку в том, как вы используете while read.

Вы, вероятно, получите этот результат, потому что вы используете перенаправление перезаписи > My_New_File.txt. Если последний файл с cat с My_New_File.txt пуст, то My_New_File.txt также будет пустым.

Я ожидаю, что вы хотите сделать либо:

  • Добавить в файл: >> My_New_File.txt;
  • Иметь разные имена файлов для каждого вывода: > "Copy_of_${file##*/}_$name"
    • ${file##*/} сопоставляет */ с началом строки и удаляет ее, поэтому мы получаем базовое имя файла. Мы могли бы также сделать ${file//\//-}, чтобы заменить все косые черты на тире.
...