2017-11-27 3 views
1

Ich versuche, eine Datei mit unterschiedlichen genomischen Regionen zu sortieren, und jede Region hat einen Buchstaben & Zahlenkombination zu sich selbst.Sortieren einer Datei und Einfügen in andere Dateien

Ich möchte die gesamte Datei in Bezug auf jeden genomischen Speicherort (columns1,2,3) sortieren, und wenn diese 3 gleich sind, und extrahieren Sie es in eine neue separate Datei.

Meine Eingabe ist:

1.txt 
chr1 10 20 . . 00000 ACTGBACA 
chr1 10 20 . + 11111 AACCCCHQ 
chr1 18 40 . . 0 AA12KCCHQ 
chr7 22 23 . . 21 KLJMWQKD 
chr7 22 23 . . 8 XJKFIRHFBF24 
chrX 199 201 . . KK AVJI24 

Was ich erwarte, ist:

chr1.10-20.txt 
chr1 10 20 ACTGBACA 
chr1 10 20 AACCCCHQ 


chr1.18-40.txt 
chr1 18 40 AA12KCCHQ 

chr7.22-23.txt 
chr7 22 23 KLJMWQKD 
chr7 22 23 XJKFIRHFBF24 

chrX.199-201.txt 
chrX 199 201 AVJI24 

ich ein Dokument mit awk Aufspalten experimentiert, aber es ist nicht das, was ich tun möchte.

awk -F, '{print > $1$2$3".txt"}' 1.txt 

Es gibt mir die Dateinamen mit allen Zeilen, und innerhalb der Dateien, es ist wieder die ganze Reihe, obwohl ich brauche nur Spalte 1,2,3 und 7.

>ls 
1.txt         
chr1 10 20 . + 11111 AACCCCHQ.txt 
chr7 22 23 . . 21 KLJMWQKD.txt  
chrX 199 201 . . KK AVJI24.txt 
chr1 10 20 . . 00000 ACTGBACA.txt 
chr1 18 40 . . 0 AA12KCCHQ.txt  
chr7 22 23 . . 8 XJKFIRHFBF24.txt 

>cat chr1\ \ \ \ 10\ \ 20\ .\ +\ 11111\ AACCCCHQ.txt 
chr1 10 20 . + 11111 AACCCCHQ 

Ich würde mich freuen, wenn Sie mir zeigen können, wie Sie die Dateinamen und deren Inhalt beheben können.

Antwort

1

Werfen Sie einen Blick auf diese:

#!/bin/sh 
INPUT="$1" 

while read -r LINE; do 
    GEN_LOC="$(echo "$LINE" | tr -s ' ' '.' | cut -d '.' -f 1,2,3)" 
    echo "$LINE" | tr -s ' ' | cut -d ' ' -f 1,2,3,6,7 >> "${GEN_LOC}.txt" 
done < "$INPUT" 

Dieses Skript wird eine Eingabedatei im Format nehmen Sie auf dem Laufenden und es in Zeile-für-Zeile gelesen. Für jede Zeile wird das zusätzliche Leerzeichen durch Punkte für den Dateinamen ersetzt und auf die Felder 1, 2 und 3 (Speichern in der Variablen $GEN_LOC) reduziert. Dann wird es die gesamte $LINE an eine Datei mit dem Namen ${GEN_LOC}.txt anhängen. Wenn mehrere Zeilen am selben Dateinamen ausgegeben werden, ist das in Ordnung - die Zeile wird einfach angehängt. Dies berücksichtigt frühere Läufe nicht. Wenn Sie das also zweimal ausführen, wird es kontinuierlich an die vorhandenen Dateien angehängt. Hoffe das hilft!

+0

Danke, aber es funktioniert nicht mit dem '.'. Und 'Zeile 3: Syntaxfehler bei oder in der Nähe von' – bapors

+0

Können Sie klarstellen, was Sie meinen? Verwenden Sie Bash oder eine andere Shell? –

+0

Ich benutze bash und läuft dieses Skript als: awk awkscript.awk 1.txt, und es gibt mir diese oben genannten Fehler – bapors

Verwandte Themen