Nano Hash - криптовалюты, майнинг, программирование

Объединение пар файлов с определенной схемой именования (UBUNTU)

** Кажется, здесь есть частичный ответ, но пользователь столкнулся с той же проблемой, что и я: важно сохранить исходную схему именования.

Цикл для объединения нескольких пары файлов с почти одинаковыми именами в UNIX**

У меня есть папка с парными файлами; имена выглядят так (все хранятся в одной папке/директории):

MX_HF20.1.fq.gz; MX_HF20.rem.1.fq.gz

MX_HF22.1.fq.gz; MX_HF22.rem.1.fq.gz

.

.

.

SD_F296.1.fq.gz; SD_F296.rem.1.fq.gz

SD_F297.1.fq.gz; SD_F297.rem.1.fq.gz

(Некоторые из вас могут распознать в этом вывод STACKS!)

На самом деле, я просто хочу добавить содержимое файла *.1.rem.fq.gz в конец файла *.1.fq.gz, сохранив исходное имя файла *.1.fq.gz.

Я поигрался с тестовыми файлами, поэтому знаю, что cat сделает это, даже если файлы имеют расширение .gz. Но мои способности к написанию сценариев bash в лучшем случае невелики, а работа с переменными имен и их хранение — это концепция, которую я все еще пытаюсь понять.

Большое спасибо!


Ответы:


1

Может быть, попробуйте использовать матч-реванш bash:

#!/bin/bash

p='([A-Z]+_[A-Z]+)([0-9]+)\.1\.rem\.fq\.gz'

for f in *.gz; do
    if [[ $f =~ $p ]]; then
        cat "${f}" >> "${BASH_REMATCH[1]}${BASH_REMATCH[2]}.1.fq.gz"
    fi
done

Так, например:

SD_F297.1.rem.fq.gz будет добавлено к SD_F297.1.fq.gz

15.07.2017
  • Спасибо за ваш ответ! Я попробовал это, и скрипт работает без ошибок, но, похоже, он вообще не меняет ни один файл (я сделал гораздо меньшие, более простые текстовые файлы (сжатые gzip) с именами, идентичными тем, что указаны выше). Я попытался изменить термин *.txt на *.fq.gz, и результат был таким же. Может быть, я что-то упускаю там? Возможно, скрипт не находит ничего, над чем можно было бы работать. 15.07.2017
  • @canfiese: Это должно работать, и я удивлен, что это не так. Может быть, попробуйте поставить эхо перед кошкой, чтобы посмотреть, что произойдет. Эхо не изменит файл, но должно показать вам, что может произойти. 15.07.2017
  • Мне очень жаль, я идиот. Приведенная выше схема именования неверна. Это должен быть *.rem.1.fq.gz. Я переключил его, и он что-то сделал... но мой тестовый файл увеличился до 175 МБ (из 16 байт), и он не открывался. Что странно, но я видел это раньше. Должно быть особенность .gz... 15.07.2017
  • Я заставил его работать. Я случайно что-то перепутал, и я думаю, что это вызвало странное поведение. Благодарю вас! Переключение .rem на .1 было прелестью. Извините за головную боль. 15.07.2017
  • Пожалуйста! И не беспокойтесь, это случается, и рад, что это работает. 15.07.2017

  • 2

    Похоже, вы ищете что-то вроде этого:

    #!/bin/bash
    for file1 in *.1.fq.gz;  do
       file2=`echo $file1 | sed -E 's/(*\.1)\.fq\.gz/\1.rem.fq.gz/'`
       cat $file1 $file2 > out.$file1
    done
    

    Обратные кавычки выполняют команду оболочки и вставляют текстовый результат в эту точку вашего скрипта.

    sed — это потоковый редактор в Unix, который манипулирует строками текста.

    Он использует регулярные выражения, и в этом случае вам нужно () для группировки и захвата первой части имени файла и \1 для ссылки на него.

    15.07.2017
  • (Отредактировано) @zakum1 Спасибо! Похоже, это действительно на правильном пути (судя по тому небольшому опыту, который у меня есть). Но я получаю следующую ошибку: sed: -e выражение № 1, символ 30: недопустимое предшествующее регулярное выражение 15.07.2017
  • Кроме того, это может иметь значение ... но мне пришлось отредактировать свою систему имен файлов. Это *.rem.1.fq.gz Яйцо на моем лице. Извиняюсь. :/ 15.07.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..