Awk将处理两个文件的结果合并成一个文件

5
我使用awk从两个不同的文件中提取和计算信息,并希望将结果合并到单个文件中的列中(例如,第一个文件的输出在列1和2中,第二个文件的输出在列3和4中)。
输入文件包含: file1
SRR513804.1218581HWI-ST695_116193610:4:1307:17513:49120 SRR513804.16872HWI ST695_116193610:4:1101:7150:72196    SRR513804.2106179HWI-
ST695_116193610:4:2206:10596:165949 SRR513804.1710546HWI-ST695_116193610:4:2107:13906:128004    SRR513804.544253

文件2

>SRR513804.1218581HWI-ST695_116193610:4:1307:17513:49120
TTTTGTTTTTTCTATATTTGAAAAAGAAATATGAAAACTTCATTTATATTTTCCACAAAG
AATGATTCAGCATCCTTCAAAGAAATTCAATATGTATAAAACGGTAATTCTAAATTTTAT
ACATATTGAATTTCTTTGAAGGATGCTGAATCATTCTTTGTGGAAAATATAAATGAAGTT
TTCATATTTCTTTTTCAAAT

为了解析第一个文件,我会这样做:
awk '
{
  s      = NF
  center = $1
}
{
  printf "%s\t %d\n", center, s
}
' file1

为了解析第二个文件,我这么做:
awk '
/^>/ {
    if (count != "")
      printf "%s\t %d\n", seq_id, count
    count  = 0
    seq_id = $0
    next
}

NF {
  long  = length($0)
  count = count+long
}
END{
  if (count != "")
    printf "%s\t %d\n", seq_id, count
}
' file2

我的临时解决方案是先创建一个临时文件,然后在第二步中覆盖它。有一种更加“优雅”的方法来获得这个输出吗?


2
如果您的帖子能够使用格式工具正确地进行排版,并且超过平均水平,我们会给予加分。但是,如果您在帖子中包含最小样本输入、所需输出(当前输出、错误消息和对问题的当前思考,这些内容不适用于您的问题),您将获得最佳和最快的回复。请不要让我们猜测数据的外观!祝您好运。 - shellter
我不太清楚您目前的代码试图做什么,但通常使用awk来确定您正在处理的文件的方法是将“NR”(总行数)与“FNR”(当前文件中已看到的行数)进行比较。 话虽如此,最简单的方法可能是在事后使用“paste”,或者如果要确保列匹配,则使用“join”。 - Kevin
4
你必须使用awk吗?paste命令可以完全满足你的需求。 - Paul
4
非常抱歉,根据您提供的内容,我无法理解需要翻译的具体内容和所需输出的结果。请您提供更明确的信息,让我可以帮助您更好地完成翻译。 - Thor
使用 [taq:paste],我需要将每个操作的输出保存在不同的文件中,然后合并它们,对吧?哦!感谢您的编辑帮助,现在这篇文章更易懂了。 - user2245731
显示剩余2条评论
1个回答

1
I希望你能更新问题,以便我们可以帮助改进答案。然而,从我所了解的情况来看,您想要总结两个文件的输出。我假设两个文件中的内容是按顺序排列的。如果不是这种情况,那么在打印摘要时我们将不得不添加额外的检查。

脚本 script.awk 的内容(重用大部分现有代码):

NR==FNR {
    s[NR]      = NF
    center[NR] = $1
    next
}

/^>/ {
    seq_id[++y] = $0
    ++i
    next
}

NF {
    long[i] += length($0)
}
END {
    for(x=1;x<=length(s);x++) {
        printf "%s\t %d\t %d\n", center[x], s[x], long[x]
    }
}

测试:

$ cat file1
SRR513804.1218581HWI-ST695_116193610:4:1307:17513:49120 SRR513804.16872HWI ST695_116193610:4:1101:7150:72196    SRR513804.2106179HWI-
ST695_116193610:4:2206:10596:165949 SRR513804.1710546HWI-ST695_116193610:4:2107:13906:128004    SRR513804.544253

$ cat file2
>SRR513804.1218581HWI-ST695_116193610:4:1307:17513:49120
TTTTGTTTTTTCTATATTTGAAAAAGAAATATGAAAACTTCATTTATATTTTCCACAAAG
AATGATTCAGCATCCTTCAAAGAAATTCAATATGTATAAAACGGTAATTCTAAATTTTAT
ACATATTGAATTTCTTTGAAGGATGCTGAATCATTCTTTGTGGAAAATATAAATGAAGTT
TTCATATTTCTTTTTCAAAT

$ awk -f script.awk file1 file2
SRR513804.1218581HWI-ST695_116193610:4:1307:17513:49120  4   200
ST695_116193610:4:2206:10596:165949  3   0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接