计算文件中的非空列

时间:2014-05-14 16:19:08

标签: grep

我有一个巨大的制表符分隔文件,其中包含ID,

Q8H1E4  C5XVC0

        M7ZVB2
Q0J032

Q8H1E4  M0Z0D4

C4J6K5

如何计算ID的数量,使用bash命令可以快速计算每列中的空格,?因此它为第1列提供了4,为第3列提供了3。还有如何计算唯一ID,因为相同的ID可能会在文件中出现多次。我使用过这个命令,但它没有指定哪一列,而是整行,

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您不反对python解决方案,这似乎可以满足您的要求:

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']