2014-09-05 2 views
0

J'ai plusieurs fichiers dans plusieurs dossiersscript BASH plus intelligent avec un chat

[[email protected] clean_reads]$ ls 
11 13 14 16 17 18 3 4 5 6 8 9 

et je veux faire un petit script bash pour concaténer ces fichiers à l'intérieur:

11]$ ls 
FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L6_1.fq FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L7_1.fq 
FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L6_2.fq FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L7_2.fq 

Mais seulement L6 L6 et L7 avec L7

en ce moment je suis au niveau de base. Je veux apprendre comment le faire plus intelligemment, au lieu de reproduire les commandes que je pouvais faire dans le terminal dans le script.

Merci tout le monde, pour moi aider.

+0

Besoin d'éclaircissements: voulez-vous dire que les fichiers seront nommés, '' xxxxxx_1.fq' et xxxxxx_2.fq 'par exemple, et vous voulez les combiner en' xxxxxx.fq'? Est-ce que tous les noms suivent strictement ce modèle? – lurker

+0

essayez 'cat * _L6_ *> newL6' et' cat * _L7_ *> newL7' - ou voici quelque chose de plus compliqué? – jm666

+0

oui je pourrais faire ceci: essayer cat * _L6_ *> newL6 et cat * _L7_ *> newL7 Mais comment je le fais une fois pour tous les fichiers dans les dossiers? Je ne peux pas se débarrasser des dossiers. –

Répondre

1

Ce n'est pas un service gratuit programmiing, mais vous pouvez apprendre quelque chose de l'autre:

#!/bin/bash 
echo2() { echo "[email protected]" >&2; } 

get_Lnums() { 
     find . -type f -regextype posix-extended -iregex '.*_L[0-9]+_[0-9]+\.fq' -maxdepth 1 -print | grep -oP '_\KL\d+' | sort -u 
} 

docat() { 
     echo2 doing $(pwd) 
     for lnum in $(get_Lnums) 
     do 
       echo cat *_${lnum}_*.fq "> new_${lnum}.all" #remove (comment out) this line when satisfied 
       #cat *_${lnum}_*.fq > new_${lnum}.all #and uncomment this 
     done 
} 

while read -r -d $'\0' dir 
do 
     (cd "$dir" && docat) #subshell - don't need cd back 
done < <(find . -type dir -maxdepth 1 -mindepth 1 -print0) 
+0

Merci beaucoup. Je ne veux pas de service gratuit mais j'apprends. Merci pour votre aide. –

Questions connexes