使用bash从多个文本文件中提取列

时间:2012-05-03 02:03:06

标签: linux bash

我正在尝试从多个文本文件(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

我想打印                    1)仅当总和(最后一列)> 25时才重新命名(第一列)。                    2)我想将输出存储到一个文件中                    3)我想在outputfile中添加一个新列,其中包含提取数据的txt文件的名称,还需要打印resnames的总数(仅当sum> 25时才从所有文本文件中删除)< / p>

我想获得以下输出

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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

尝试:

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

(未经测试)

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