2016-06-06 15 views
0

Ich versuche, durch Daten zu filtern, und möchte nur die Dateien kopieren, die nur 1 Vertreter einer bestimmten Gruppe haben. Zum Beispiel könnte die Datei wie folgt aussehen:nur Kopieren von Dateien mit eindeutigem Inhalt

sample_AAAAA_9824_r1 GGAAGCATCGTGGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAAYGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAATTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGTGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATkATACTRCAAAGTTC ----- sample_AACCC_12358_r1 GGAAGCATCGTGGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAWTTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGTGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATTATACTGCAAAGTTC ----- sample_AATTT_3905_r1 GGAAGCATCGTGGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATG TGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAATTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTTTCAGTCATATGAGAATTGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATGATACTACAAAGTTCCTTCCCATA ----- sample_ACGTA_178_r1 GGAAGCATCGTAGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAATTTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGCGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATGATACTACAAAGTTC ----- sample_ACTGC_9933_r1 GGAAGCATCGTRGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAwTTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGYGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATGATACTACAAAGTTC -----

Ich habe ungefähr 36000 dieser Dateien und möchte nur diese in einen anderen Ordner kopieren, die nur einen Eintrag pro Beispiel haben (1 Beispiel ist beispielsweise ACTGC). Es gibt 26 Beispiel "Nummern", bestehend aus 5 Buchstaben (z. B. AAAAA, AATTTT, ACGTC, ...) die folgende Nummer und "r1" ist irrelevant.

Ich habe verschiedene Bash-Skripte dafür durchgesehen, kann aber nicht genau das finden, was ich brauche. Ich kann das Auftreten von jeder Probe in einer Datei zählen, aber das ist wahrscheinlich nicht der Weg zu gehen ...

jede Hilfe sehr geschätzt wird, Yannick

+2

Bitte lesen Sie http://stackoverflow.com/help/how-to-ask. Zeig uns, was du bereits versucht hast und was nicht funktioniert. –

+0

Sie sollten wirklich eine Datenbank verwenden, um diese Informationen zu speichern, nicht Tausende einzelner Dateien. – chepner

Antwort

0

Sie eine Schleife cmp mit vergleichen können basierend am Ausgang des sort gegen die Ausgabe von sort | uniq:

for f in files/* 
do if cmp -s <(grep sample ${f} | cut -d'_' -f2 | sort) <(grep sample ${f} | cut -d'_' -f2 | sort | uniq) 
then 
    echo "copying file ${f} here..." 
    # ... copy 
else 
    "not copying file ${f} here" # do nothing...! 
fi 
done 
+0

vielen Dank für die schnelle Antwort, ich denke, das wird funktionieren! –