Ich habe eine Datei, die ungefähr so aussieht:
ID101 G T freq=.5 nonetype ANC=.1 addinfor
ID102 A T freq=.3 ANC=.01 addinfor
ID102 A T freq=.01 type=1 ALT=0.022 ANC=.02 addinfor
Wie Sie sehen können, hat jede Zeile eine leicht unterschiedliche Anzahl von Spalten. Ich möchte speziell Spalte 1, Spalte 2, Spalte 3, Spalte 4 und die Spalte, die mit beginntANC=
Gewünschte Ausgabe:
ID101 G T freq=.5 ANC=.1
ID102 A T freq=.3 ANC=.01
ID102 A T freq=.01 ANC=.02
Im Allgemeinen verwende ich den Befehl an awk, um Dateien zu analysieren:
awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'
Gibt es eine einfache Möglichkeit, diesen Befehl so zu ändern, dass er in solchen Situationen funktioniert?
Ich denke so etwas könnte funktionieren:
awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'
Wie kann ich dies jedoch bearbeiten, um auch die ersten Spalten zu drucken?
text-processing
sed
awk
Kosmiktypist
quelle
quelle
i=5
tun?Angenommen, die
ANC=
Spalte ist immer die vorletzte Spalte (wie in den Beispieldaten):NF
ist die Anzahl der Felder (Spalten), in dieawk
jeder Datensatz (jede Zeile) aufgeteilt wird.$(NF-1)
ist der Wert des vorletzten Feldes.quelle
Kurz
$, =>
OFS
@F[0..3]
=>$F[0] $F[1] $F[2] $F[4]
quelle