2

我正在尝试从多个文本文件(3000 个文件)中提取列。我的文本文件示例如下所示。

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

仅当总和(最后一列)> 25 时,我才想打印 1) resnames(第一列)。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

请问有什么建议吗?

4

2 回答 2

1

尝试:

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

(未测试)

于 2012-05-03T02:07:49.677 回答
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
于 2012-05-03T02:48:27.987 回答