Я использую оболочку bash и работаю с человеческим эталонным геномом GRCh38. У меня есть список файлов в каталоге, по одному файлу для каждой хромосомы. Теперь мне нужно найти список имен файлов. Кажется тривиальным, но имена файлов неудобно имеют специальные символы. Пример:bash - обработка специальных символов в именах файлов
ls -1 ../GRCh38_chromosomes/
выводит содержимое каталога:
…
HLA-DRB1*13:01:01?HLA00797_13935_bp.fa
HLA-DRB1*13:02:01?HLA00798_13941_bp.fa
HLA-DRB1*14:05:01?HLA00837_13933_bp.fa
HLA-DRB1*14:54:01?HLA02371_13936_bp.fa
HLA-DRB1*15:01:01:01?HLA00865_11080_bp.fa
HLA-DRB1*15:01:01:02?HLA03453_11571_bp.fa
…
Im испытывает трудности в поиске конкретного файла (из жгутов сценария), потому что характер, в частности, кажется, заменяются на «?» «\ т». Пример:
ls -1 ../GRCh38_chromosomes/ | perl -ne ' print $_; '
Я ожидаю, что тот же результат, но вместо того, чтобы получить:
…
HLA-DRB1*13:01:01 HLA00797_13935_bp.fa
HLA-DRB1*13:02:01 HLA00798_13941_bp.fa
HLA-DRB1*14:05:01 HLA00837_13933_bp.fa
HLA-DRB1*14:54:01 HLA02371_13936_bp.fa
HLA-DRB1*15:01:01:01 HLA00865_11080_bp.fa
HLA-DRB1*15:01:01:02 HLA03453_11571_bp.fa
…
это вызывает у меня головную боль при попытке поиска, такие как
ls -1 ../GRCh38_chromosomes/ | perl -ne ' if ($_ =~ /^\QHLA-DRB1*15:01:01:02?\E/) { print $_; } '
, который должен вывести:
HLA-DRB1*15:01:01:02?HLA03453_11571_bp.fa
, но вместо этого ничего не находит. Ive также пробовал awk с той же проблемой, и мне интересно, почему они помещают специальные символы в имена хромосом для GRCh38? Любые идеи, как справиться с этими проблемными персонажами?
Какая версия per? Я имею perl 5.16.3 и не могу дублировать этот вопрос – SaintHax
У меня есть 5.22.1, но также найти то же поведение с awk – nak3c
Вы не указали код awk, так что вам не о чем заняться. Избавьтесь от '-1' в ls - это не нужно. Когда вы отправляете ls в канал, он всегда находится в одном столбце. Единственный способ получить результаты - ввести 'ls -l' вместо' ls' или 'ls -1'. – SaintHax