cat несколько файлов на основе идентификатора в имени файла - PullRequest
0 голосов
/ 12 апреля 2019

Я хотел бы объединить файлы с одинаковым идентификатором перед первым подчеркиванием в один файл, используя cat.Как мне сделать это для нескольких файлов, как показано ниже?
Мысль о чем-то вроде этого:

for f in *.R1.fastq.gz; do cat "$f" > "${f%}.fastq.gz"; done

in

9989_L004_R1.fastq.gz
9989_L005_R1.fastq.gz
9989_L009_R1.fastq.gz
9873_L008_R1.fastq.gz
9873_L005_R1.fastq.gz
9873_L001_R1.fastq.gz

out

9989.fastq.gz
9873.fastq.gz

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019
for f in *_R1.fastq.gz; do cat "$f" >> "${f%%_*}.fastq.gz"; done
  • >> для добавления,
  • ${f%%_*} удаляет самый длинный суффикс в $f, соответствующий _*.
1 голос
/ 12 апреля 2019

Вот еще один способ:

for f in *_R1.fast1.gz; do 
   [[ -f "${f%%_*}.fastq.gz" ]] || cat ${f%%_*}_*_R1.fast1.gz > "${f%%_*}.fastq.gz"
done

или если вы хотите, чтобы он был немного более читабельным:

for f in *_R1.fast1.gz; do 
   key="${f%%_*}"
   [[ -f "${key}.fastq.gz" ]] || cat ${key}_*_R1.fast1.gz > "${key}.fastq.gz"
done
...