UPDATEWie selektiv Spalten und Zeilen mit bash oder Python
Ich vermute, zu entfernen, dass der Eingang und die gewünschte Ausgangsdaten Ich war zunächst in setzen nicht genau das gleiche wie ich, was ich in Bezug auf Leerzeichen haben. Ich habe jetzt neue Eingabedaten und gewünschte Ausgabedaten eingegeben.
Im Moment habe ich einen Datensatz, der wie folgt aussieht:
INPUT
Hybridization REF TCGA-13-A5FT-01A-11D-A409-05 TCGA-13-A5FT-01A-11D-A409-05 TCGA-13-A5FT-01A-11D-A409-05 TCGA-13-A5FT-01A-11D-A409-05 TCGA-13-A5FU-01A-11D-A409-05 TCGA-13-A5FU-01A-11D-A409-05 TCGA-13-A5FU-01A-11D-A409-05 TCGA-13-A5FU-01A-11D-A409-05 TCGA-29-A5NZ-01A-11D-A409-05 TCGA-29-A5NZ-01A-11D-A409-05 TCGA-29-A5NZ-01A-11D-A409-05 TCGA-29-A5NZ-01A-11D-A409-05 TCGA-3P-A9WA-01A-11D-A409-05 TCGA-3P-A9WA-01A-11D-A409-05 TCGA-3P-A9WA-01A-11D-A409-05 TCGA-3P-A9WA-01A-11D-A409-05 TCGA-59-A5PD-01A-11D-A409-05 TCGA-59-A5PD-01A-11D-A409-05 TCGA-59-A5PD-01A-11D-A409-05 TCGA-59-A5PD-01A-11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-05 TCGA-OY-A56P-01A-12D-A409-05 TCGA-OY-A56P-01A-12D-A409-05 TCGA-OY-A56P-01A-12D-A409-05 TCGA-OY-A56P-01A-12D-A409-05 TCGA-OY-A56Q-01A-11D-A409-05 TCGA-OY-A56Q-01A-11D-A409-05 TCGA-OY-A56Q-01A-11D-A409-05 TCGA-OY-A56Q-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-WR-A838-01A-12D-A409-05 TCGA-WR-A838-01A-12D-A409-05 TCGA-WR-A838-01A-12D-A409-05 TCGA-WR-A838-01A-12D-A409-05
Composite Element REF Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate Beta_value Gene_Symbol Chromosome Genomic_Coordinate
cg00000029 0.162232896986279 RBL2 16 53468112 0.191627667901702 RBL2 16 53468112 0.0712181967886229 RBL2 16 53468112 0.0797617926225958 RBL2 16 53468112 0.134907151266991 RBL2 16 53468112 0.0541415985613948 RBL2 16 53468112 0.0898579298345672 RBL2 16 53468112 0.037865566345129 RBL2 16 53468112 0.0681542463965581 RBL2 16 53468112 0.101053013486289 RBL2 16 53468112
cg00000108 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206
cg00000109 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037
Der Datensatz ist viel größer und ist fast 10 GB groß. Zum Beispiel zu groß um in R zu tun.
Viele der Spalten sind jedoch effektiv Duplikate. Zum Beispiel muss ich nur jeweils eine der Spalten mit der Überschrift (zweite Zeile) Gene_Symbol
, Chromosome
und Genomic_Coordinate
behalten. Die einzelnen Beta_value
Spalten müssen bleiben, da sie für jede Probe unterschiedlich sind. Proben-IDs befinden sich in der ersten Zeile. So ein Beispiel gewünschte Ausgabe des obigen ist:
GEWÜNSCHTEN OUTPUT
Hybridization REF Gene_Symbol Chromosome Genomic_Coordinate TCGA-13-A5FT-01A-11D-A409-05 TCGA-13-A5FU-01A-11D-A409-05 TCGA-29-A5NZ-01A-11D-A409-05 TCGA-3P-A9WA-01A-11D-A409-05 TCGA-59-A5PD-01A-11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-05 TCGA-OY-A56P-01A-12D-A409-05 TCGA-OY-A56Q-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-WR-A838-01A-12D-A409-05
cg00000029 RBL2 16 53468112 0.162232897 0.191627668 0.071218197 0.079761793 0.134907151 0.054141599 0.08985793 0.037865566 0.068154246 0.101053013
cg00000108 C3orf35 3 37459206 NA NA NA NA NA NA NA NA NA NA
cg00000109 FNDC3B 3 171916037 NA NA NA NA NA NA NA NA NA NA
beachte, dass ich die Spaltenüberschriften in der ersten Reihe haben gemischt redundante Informationen zu entfernen. Die mit TCGA...
überschriebenen Spalten sind die Beispiel-IDs. Beachten Sie, dass eine harte Codierung der Spaltennummern nicht funktioniert, da ich mehrere Dateien durchlaufen muss, die alle eine variable Anzahl von Samples/Spalten haben.
Was ist die effizienteste Art, das mit bash oder mit Python zu tun?
EDIT:
Mit John Zwinck Antwort unten aber mit \t
zwischen jedem %s
ich jetzt erhalte die folgende Fehlermeldung:
+ NR == 1 '{' ../../../methods/meth_ma_gene/awk_methreformat.sh: line 3: NR: command not found ../../../methods/meth_ma_gene/awk_methreformat.sh: line 5: syntax error near unexpected token `(' ../../../methods/meth_ma_gene/awk_methreformat.sh: line 5: ` for (i=1; i <= NF; i++) {'
ich das awk-Skript in einem Bash-Skript ausgeführt werden wie folgt :
#!/usr/bin/env bash
for f in TCGAOV*; do
sed 's/Hybridization REF/Hybridization_REF/; s/Composite Element REF/Composite_Element_REF/' "$f" > "final.$f"
bash -x ./../../methods/meth_ma_gene/awk_methreformat.sh "final.$f" > "final.$f"
done
wo das referenzierte awk-Skript ist:
#!/usr/bin/awk -f
NR == 1 {
# collect sample names
for (i=1; i <= NF; i++) {
sample[i] = $i
}
}
NR == 2 {
# first four columns are always the same
cols[1] = 1
cols[2] = 3
cols[3] = 4
cols[4] = 5
printf "%s\t%s\t%s\t%s\t", sample[1], $3, $4, $5
# dynamic columns (in practice: 2,6,10,...)
for (i=1; i <= NF; i++) {
if ($i == "Beta_value") {
cols[length(cols)+1] = i
printf "%s\t", sample[i]
}
}
printf "\n"
}
NR >= 3 {
# print cols from data row
for (i=1; i <= length(cols); i++) {
printf "%s\t", $cols[i]
}
printf "\n"
}
Ich denke, das kann etwas mit dem Abstand zwischen den Feldern zu tun haben. Beachten Sie, dass ich habe auch die Eingabe über geändert, da ich verpasst, dass es eigentlich keine _
zwischen den Worten Hybridization REF
bilden und denen auch Composite Element REF
Da Sie Python in der Frage enthalten, haben Sie versucht, Pandas mit? –
Nein, soll ich? Ich habe es gerade jetzt nachgeschlagen und es scheint, dass Pandas bietet Datenanalyse-Funktionalität, anstatt Datenformatierung – user3313178
Es kann im Allgemeinen nützlich sein für große Matrix-Manipulationen. Datenbereinigung ist eine Teilmenge der Datenanalyse –