【发布时间】: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(在当前文件中看到的行数)。也就是说,事后使用paste或join可能是最简单的方法,如果您想确保列匹配。 -
一定要使用
awk吗?paste命令完全符合您的要求。 -
请在问题中添加所需的输出。
-
使用 [taq:paste] 我需要将每个操作的输出放在不同的文件中,然后将其合并,不是吗?哦!感谢您的版本帮助,现在帖子更容易理解了。
标签: awk