Ich möchte 2 Dateien zusammenführen und sie einer neuen Datei zuweisen, während eine neue nicht vorhandene Spalte hinzugefügt wird, vorzugsweise mit awk in Unix :awk, um zwei Dateien zusammenzufassen, während die Spalteneingabe geändert wird und eine zusätzliche Spalte zur Ausgabedatei hinzugefügt wird
Datei 1: VDR.txt, keinen Kopf hat, ist Raum getrennt und sieht wie folgt aus:
chr12-45000000-50000000 --- rs192072617 48225416 0.000 0.270 0.999 0 -1 -1 -1
chr12-45000000-50000000 --- rs181728325 48225429 0.000 0.144 1.000 0 -1 -1 -1
chr12-45000000-50000000 --- rs187216594 48225500 0.000 0.007 1.000 0 -1 -1 -1
File 2: METAL1.tbl hat einen Header, wird wie folgt Tab getrennt und sieht :
MarkerName Allele1 Allele2 Weight Zscore P-value Direction HetISq HetChiSq HetDf HetPVal
rs192072617 a g 2887.00 1.579 0.1143 ++ 0.0 0.032 1 0.8579
rs7929618 c g 2887.00 -1.416 0.1568 -+ 47.4 1.899 1 0.1681
rs181728325 t c 2887.00 1.469 0.1419 ++ 73.9 3.830 1 0.05033
rs7190157 a c 2887.00 1.952 0.05088 +- 72.7 3.669 1 0.05542
rs12364336 a g 2887.00 -1.503 0.1328 -+ 69.8 3.306 1 0.06902
rs187216594 t c 2887.00 -0.082 0.9349 +- 74.8 3.964 1 0.04649
rs12562373 a g 2887.00 -0.290 0.7717 -+ 0.0 0.150 1 0.6984
Dateien haben ungleiche Zeilenanzahl, die erste Datei (VDR.txt) ist viel kürzer als die zweite Datei (METAL1.tbl).
Ich möchte:
- Merge diese Dateien durch die dritte Spalte der ersten Datei (VDR.txt) und der ersten Spalte der zweiten Datei (METAL1.tbl).
- Behalten Sie nur die Spalten 1, 2, 3 und 4 aus der ersten Datei (VDR.txt) und alle Spalten aus der zweiten Datei (METAL1.tbl).
- Behalten Sie nur die Zeichen vor dem ersten Strich
"-"
aus der ersten Spalte der ersten Datei (VDR.txt) - eine neue Spalte in die Ausgabedatei hinzufügen, die eine bestimmte Zeichenfolge (zB „VDR“) wiederholt
- Ausgabedatei muss keine Kopfzeile haben, aber wenn es notwendig ist, wäre es schön, sie wie unten angegeben zu haben.
So würde Ich mag eine Ausgabedatei haben (output.txt), die am Ende wie folgt aussieht:
gene MarkerName chr BP impute Allele1 Allele2 Weight Zscore P-value Direction HetISq HetChiSq HetDf HetPVal
VDR rs192072617 chr12 48225416 --- a g 2887 1.579 0.1143 ++ 0 0.032 1 0.8579
VDR rs181728325 chr12 48225429 --- t c 2887 1.469 0.1419 ++ 73.9 3.83 1 0.05033
VDR rs187216594 chr12 48225500 --- t c 2887 -0.082 0.9349 +- 74.8 3.964 1 0.04649
Mein Versuch, dies:
$ awk 'FNR==NR {a[$1]=$1" "$2" "$3" "$4" "$5;next}{print $3, gensub(/-.*/, "", $1), $4, $2, a[$3]}' METAL1.tbl VDR.txt
Es geht Die Spalte chr und die Spalte ordnen den richtigen Weg, aber leider nur die gewünschten Spalten aus VDR.txt und nicht die zusammengeführte Datei.
Ich bin mir bewusst, dass dies ein ziemlich komplexes Beispiel ist, jede Hilfe oder Anregung würde sehr geschätzt werden.
Danke,
Mel
So hast du einen Versuch, dieses Problem zu lösen? Wenn ja, sollten Sie dies teilen. Fragen in Form von "Hier sind meine Angaben, bitte Code für mich" werden im Allgemeinen nicht gut angenommen, aber Fragen in Form von "Hier ist mein Code, und das ist der Teil, mit dem ich Probleme habe". – Carpetsmoker
Wie werden Felder in den Dateien identifiziert? Feste Breite? oder was sind die Trennzeichen? –
Ich würde empfehlen, Ihre Datenprobe auf 4 Spalten oder so zu reduzieren (gerade genug, um das zugrunde liegende Problem zu lösen). Kennen Sie den Unix/Linux-Befehl 'Join'? Wenn Sie mit begrenzten Daten (wie '|' oder Tab) arbeiten können, können Sie wahrscheinlich tun, was Sie wollen in 1 Zeile. Aber ich habe mir Ihre Ein- und Ausgänge nicht genau angesehen (weil sie zu breit sind ;-), damit ich falsch liegen könnte. Viel Glück. – shellter