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

时间:2013-05-23 18:14:11

标签: awk

我使用awk从两个不同的文件中提取和计算信息,我想将结果合并到列中的单个文件中(例如,第1列和第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

file2的

>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 个答案:

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