【问题标题】:Awk merge the results of processing two files into a single fileawk 将处理两个文件的结果合并到一个文件中
【发布时间】:2013-06-16 12:38:59
【问题描述】:

我使用 awk 从两个不同的文件中提取和计算信息,我想将结果合并到列中的单个文件中(例如,第 1 列和第 2 列中的第一个文件的输出和第 2 列中的第二个文件的输出) 3 和 4)。

输入文件包含:

文件1

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

我的临时解决方案是在第二步中创建一个临时并覆盖。有没有更“优雅”的方式来获得这个输出?

【问题讨论】:

  • +1 以获得优于平均水平的首次(ish)发布和正确使用格式化工具。但是,如果您包含最小样本输入、该输入所需的输出(当前输出、错误消息和当前对问题的思考(不适合您的问题)),您将获得最佳和最快的回复。不要让我们猜测数据的外观! ; -) 祝你好运。
  • 我不太清楚你当前的代码试图做什么,但通常的 awk 方法来判断你在哪个文件上是比较 NR (看到的总行数)使用FNR(在当前文件中看到的行数)。也就是说,事后使用pastejoin 可能是最简单的方法,如果您想确保列匹配。
  • 一定要使用awk吗? paste 命令完全符合您的要求。
  • 请在问题中添加所需的输出。
  • 使用 [taq:paste] 我需要将每个操作的输出放在不同的文件中,然后将其合并,不是吗?哦!感谢您的版本帮助,现在帖子更容易理解了。

标签: awk


【解决方案1】:

我对要求并不完全清楚,如果您可以更新问题,我们可以帮助即兴回答。但是,根据我收集到的信息,您想总结这两个文件的输出。我假设两个文件中的内容是按顺序排列的。如果不是这种情况,那么我们将不得不在打印摘要时添加额外的检查。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多