Mam plik, który wygląda mniej więcej tak:
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
Jak widać, każda linia ma nieco inną liczbę kolumn. W szczególności chcę kolumnę 1, kolumnę 2, kolumnę 3, kolumnę 4 i kolumnę, która zaczyna się odANC=
Pożądane wyjście:
ID101 G T freq=.5 ANC=.1
ID102 A T freq=.3 ANC=.01
ID102 A T freq=.01 ANC=.02
Zazwyczaj używam polecenia awk do analizowania plików:
awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'
Czy istnieje prosty sposób na zmianę tego polecenia, aby działało w takich sytuacjach?
Myślę, że coś takiego może działać:
awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'
Jak mogę to jednak edytować, aby wydrukować również pierwsze kolumny?
text-processing
sed
awk
kosmiczny typista
źródło
źródło
i=5
zrobić?Zakładając, że
ANC=
kolumna jest zawsze przedostatnią kolumną (jak w przykładowych danych):NF
to liczba pól (kolumn), na któreawk
dzieli się każdy rekord (wiersz).$(NF-1)
jest wartością przedostatniego pola.źródło
Krótki
$, =>
OFS
@F[0..3]
=>$F[0] $F[1] $F[2] $F[4]
źródło