【问题标题】:simpler way to extract and count data提取和计算数据的更简单方法
【发布时间】:2016-01-14 04:06:11
【问题描述】:

我需要从我的数据中提取特定信息并对其进行总结。

我有 246 个文件需要做同样的事情。

原来如此

 for f in *.vcf; awk -F"\t" 'NR>1 {split($10,a,":");
              count10[a[7]]++}
        END  {for (i in count10)
                if (i>0.25)
                  sum += count10[i];
              print sum }' "$f" > ${f}.txt

我为每个旧文件获取新文件,其中包含我从旧文件中提取的信息(一些整数)

然后我使用 cat 函数连接新文件以生成一个最终的大文件

有没有更简单的方法来连接所有文件而不产生单个新文件

【问题讨论】:

标签: shell awk count cat


【解决方案1】:

您可以将代码中的最后一行更改为如下所示,然后它将继续附加到您的最终输出文件中,如下所示

for f in *.vcf; awk -F"\t" 'NR>1 {split($10,a,":");
          count10[a[7]]++}
    END  {for (i in count10)
            if (i>0.25)
              sum += count10[i];
          print sum }' "$f" >> FINAL.txt

希望这会有所帮助..

【讨论】:

    【解决方案2】:

    又快又脏

    rm Summary.txt 2>/dev/null 
    for f in *.vcf; awk -F"\t" 'NR>1 {split($10,a,":");
                  count10[a[7]]++}
            END  {for (i in count10)
                    if (i>0.25)
                      sum += count10[i];
                  print sum >> Summary.txt }' "$f"
    

    如果你再解释一下,shell 级别的第一个 for 可以直接使用 awk 跳过

    【讨论】:

    • 您需要引用您要重定向到的文件 ("Summary.txt")。
    • 并且不要不必要地将输出重定向放在 awk 脚本中,把它放在外面:awk 'script' input >> output?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多