Saya punya file yang memiliki tiga kolom. Kolom 3 berisi nama-nama gen dan terlihat seperti ini:
Rv0729,Rv0993,Rv1408
Rv0162c,Rv0761c,Rv1862,Rv3086
Rv2790c
Bagaimana saya bisa mencetak jumlah gen di setiap baris?
text-processing
Saisha
sumber
sumber
Rv*
pola di mana saja pada baris, tidak hanya di kolom tertentu. Jadi saya hanya akan mencatat bahwa jika Anda benar-benar memiliki data lain dalam file tersebut, tidak disajikan dalam pertanyaan di sini, Anda mungkin perlu memodifikasi solusinya. (Atau jelaskan pertanyaannya.)Jawaban:
Anda hanya ingin menambahkan kolom dengan jumlah kolom di dalamnya. Ini dapat dilakukan dengan menggunakan
awk
:NF
adalahawk
variabel yang berisi jumlah bidang (kolom) dalam catatan saat ini (baris). Kami mencetak nomor ini diikuti dengan koma dan sisa baris, untuk setiap baris.Alternatif (hasil yang sama, tetapi mungkin terlihat sedikit lebih bersih):
FS
adalah pemisah bidang yangawk
digunakan untuk membagi setiap rekaman menjadi bidang, dan kami menyetelnya menjadi koma dengan-F ','
pada baris perintah (seperti pada solusi pertama).OFS
adalah pemisah bidang keluaran , dan kami menetapkan agar sama denganFS
sebelum membaca baris input pertama.sumber
Jika Anda ingin menghitung jumlah kemunculan
Rv[0-9]{4}c?
pola yang bertentangan dengan jumlah bidang yang dibatasi koma seperti yang disarankan subjek Anda, Anda dapat melakukan:sumber
Pendekatan Perl:
The
-a
merekperl
berperilaku sepertiawk
dan membagi setiap baris masukan pada string yang diberikan oleh-F
dan menyimpan bidang yang dihasilkan ke dalam array@F
. Oleh karena itu,$#F
akan menjadi indeks array tertinggi di@F
dan, sejak array mulai menghitung0
,$#F+1
akan menjadi jumlah total elemen dalam array. The-p
berarti "mencetak setiap baris masukan setelah aplpying script yang diberikan oleh-e
. Thes///
adalah operator substitusi dan di sini yang menggantikan awal dari garis (^
) dengan jumlah bidang + 1 dan koma ($#F+1 . ","
).sumber
Pertanyaan Anda menyatakan bahwa kolom 3 berisi nama-nama gen. Saya berasumsi input aktual Anda adalah sebagai berikut:
Setiap nama gen di kolom3 berisi
Rv
substring terkemuka . Dengan demikian kita dapat menghitungnya dengan python:Daftar yang dihasilkan menunjukkan jumlah gen di setiap baris, dalam urutannya masing-masing. Jika kita ingin membuatnya lebih verbose dan menyertakan kemungkinan bahwa gen mungkin tidak mengandung string "Rv" (tetapi pertahankan asumsi bahwa column3 adalah string nilai yang dipisah koma), kita juga dapat melakukan hal berikut:
Uji coba:
sumber