2014-05-14 24 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']