【问题标题】:extract columns from multiple text files with bash使用 bash 从多个文本文件中提取列
【发布时间】:2012-05-12 12:57:30
【问题描述】:

我正在尝试从多个文本文件(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)我想在输出文件中添加一个新列,其中包含提取数据的 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

有什么建议吗?

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    试试:

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

    (未测试)

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-13
        • 2012-08-10
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多