我使用awk从两个不同的文件中提取和计算信息,并希望将结果合并到单个文件中的列中(例如,第一个文件的输出在列1和2中,第二个文件的输出在列3和4中)。
输入文件包含: file1
为了解析第一个文件,我会这样做:
为了解析第二个文件,我这么做:
输入文件包含: 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
我的临时解决方案是先创建一个临时文件,然后在第二步中覆盖它。有一种更加“优雅”的方法来获得这个输出吗?
paste
命令可以完全满足你的需求。 - Paul