2012-05-03 36 views
2

我想从多个文本文件(3000个文件)中提取列。我的文本文件示例如下所示。从多个文本文件中提取列与bash

res   ABS sum 
SER A 1 161.15 138.3 
CYS A 2 66.65 49.6 
PRO A 3 21.48 15.8 
ALA A 4 77.68 72.0 
ILE A 5 15.70 9.0 
HIS A 6 10.88 5.9 

我想打印 1)resnames(第一列)只如果总和(最后一列)是> 25。 2)我想将输出存储到一个文件中 3)我想在输出文件中添加一个新列,其中提取数据的txt文件的名称也需要打印总数resnames(从所有文本文件只有在和> 25)

我想获得以下输出

SER AA.txt 
CYS AA.txt 
ALA AA.txt 
SER BB.txt 

Total numberof SER- 2 
Total number of ALA- 1 
Total number of CYS- 1 

我怎样才能使用bash这个输出?我试了下面的代码

for i in files/*.txt 
do 
awk 'BEGIN{FS=OFS=" "}{if($5 > 25) print $1,i}' 
done 

有什么建议吗?

回答

0
awk '{ 
    if ($NF ~ /([0-9])+(\.)?([0-9])+/ && $NF > 25) { 
     print $1, FILENAME; 
     res[$1]++; 
    } 
} 
END { 
    for (i in res) { 
      print "Total number of ", i, "-", res[i]; 
    } 
}' res.txt 

这里的输出我得到你的例子:

SER res.txt 
CYS res.txt 
ALA res.txt 
Total number of SER - 1 
Total number of CYS - 1 
Total number of ALA - 1 
+0

太谢谢你了。 – Joel

1

尝试:

awk '{ a[$1]++ } 
    END { for (k in a) print "Total number of " k " - " a[k] }' FILES 

(未测试)