Saya memiliki file yang terlihat seperti ini:
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
Seperti yang Anda lihat, setiap baris memiliki jumlah kolom yang sedikit berbeda. Saya secara khusus menginginkan kolom 1, kolom 2, kolom 3, kolom 4 dan kolom yang dimulai denganANC=
Output yang diinginkan:
ID101 G T freq=.5 ANC=.1
ID102 A T freq=.3 ANC=.01
ID102 A T freq=.01 ANC=.02
Saya biasanya menggunakan perintah awk untuk mem-parsing file:
awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'
Apakah ada cara mudah untuk mengubah perintah ini agar berfungsi untuk situasi seperti ini?
Saya pikir sesuatu seperti ini mungkin berhasil:
awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'
Namun, bagaimana saya bisa mengedit ini untuk juga mencetak kolom pertama?
text-processing
sed
awk
kosmictypist
sumber
sumber
i=5
dilakukan?Dengan asumsi bahwa
ANC=
kolom selalu merupakan kolom kedua-terakhir (seperti pada contoh data):NF
adalah jumlah bidang (kolom) yangawk
membagi setiap rekaman (baris) menjadi.$(NF-1)
adalah nilai dari bidang kedua ke terakhir.sumber
Singkat
$, =>
OFS
@F[0..3]
=>$F[0] $F[1] $F[2] $F[4]
sumber