Câu hỏi của bạn nói rằng cột 3 chứa tên của các gen. Tôi giả sử đầu vào thực tế của bạn là như sau:
column1 column2 Rv0729,Rv0993,Rv1408
column1 column2 Rv0162c,Rv0761c,Rv1862,Rv3086
column1 column2 Rv2790c
Mỗi tên gen trong cột 3 chứa Rv
chuỗi con hàng đầu . Vì vậy, chúng ta có thể đếm chúng trong python như vậy:
$ python -c "import sys;print map(lambda x: x.split()[2].count('Rv'),sys.stdin.readlines())" < input.txt
[3, 4, 1]
Danh sách kết quả cho thấy số lượng gen trong mỗi dòng, theo thứ tự tương ứng của chúng. Nếu chúng ta muốn làm cho nó dài dòng hơn và bao gồm khả năng các gen có thể không chứa chuỗi "Rv" (nhưng vẫn giữ giả định rằng cột 3 là chuỗi giá trị được phân tách bằng dấu phẩy), chúng ta cũng có thể làm như sau:
#!/usr/bin/env python
import sys
with open(sys.argv[1]) as fd:
for index,line in enumerate(fd):
columns = line.strip().split()
num_genes=len(columns[2].split(","))
print("Line "+str(index)+" contains "+str(num_genes))
Chạy thử nghiệm:
$ ./count_genes.py input.txt
Line 0 contains 3
Line 1 contains 4
Line 2 contains 1