2014-05-14 25 views
0

我有一個包含ID的這樣一個巨大的製表符分隔的文件,計數非空列在文件

Q8H1E4 C5XVC0 

     M7ZVB2 
Q0J032 

Q8H1E4 M0Z0D4 

C4J6K5 

如何算ID的排名,而無需在每個柱迅速空的空間,使用bash命令可能?所以它給了我4列1和列3的3.另外如何計算唯一的ID,因爲相同的ID可能會出現在文件中多次。我已經使用這個命令,但它沒有指定哪列,但需要整條生產線,

grep -v '\s' file.txt |wc -l 
+0

不很確定hw使用bash命令,但在python中:使用'set()'來跟蹤所有的id。對'split'的結果使用'len'來計算每行id的個數。 – 1478963

+0

你正在閱讀一個文件,並有多行? – abhishekgarg

+0

謝謝@ user2100799我用set()做了它,但想知道是否有更快捷的方式來使用bash命令 – user3224522

回答

0

這awk的應該更適合:

awk 'NF>1{c++;next} 
    NF==1{id=$1!=""?$1 :$2;a[id]++} 
    END{ 
     print "both fields:"c 
     for (i in a){print i,a[i]}}' infile 
+0

謝謝,對每一行的解釋都非常讚賞。另外,我需要打印計數總和.. – user3224522

0

如果你不反對蟒蛇解決這似乎給你問:

import re 

reg = re.compile('\W+') 
uniqueEntries = [] 
counts = dict() 

with open('test.txt', 'r') as dataFile: 
    for line in dataFile: 
     result = re.split(reg, line) 
     for item in result: 
      if item is not '': 
       if result.index(item) in counts: 
        counts[result.index(item)] += 1 
       else: 
        counts[result.index(item)] = 1 
       if item not in uniqueEntries: 
        uniqueEntries.append(item) 
print('counts = {0}, uniqueEntries = {1}'.format(counts, uniqueEntries)) 

個計數= {0:4,1:3},uniqueEntries = [ 'Q8H1E4', 'C5XVC0', 'M7ZVB2', 'Q0J032', 'M0Z0D4', 'C4J6K5']