【发布时间】:2020-02-18 15:01:48
【问题描述】:
我想知道是否有办法将单个文件作为输出,其中每列都有一些从多个文件中获取的计算数字。 我的意见是:
@SRR1544694.1 Run0199_AC237YACXX_L2_T1101_C27 length=52
AGTAAAGGGACTCGGTCTCCTTCCATTGGAGGTTGTTTTCTAGGCTCAACAC
+SRR1544694.1 Run0199_AC237YACXX_L2_T1101_C27 length=52
?;=ADDDDF@C3ACE:E?FED+CF>AABGFFB:?10?:BDDFB?@3BFFEEF
@SRR1544694.2 Run0199_AC237YACXX_L2_T1101_C28 length=52
TTGATAGGGGAGATGCTAGCAAAAAGGTGTACTTCTCAGCGGAGCAGAAAGA
+SRR1544694.2 Run0199_AC237YACXX_L2_T1101_C28 length=52
CCCFFFFFHHHHHIHIGHIIIGGIHII?DGHIIIIIIEHCHIIIIIIHIHHI
@SRR1544694.3 Run0199_AC237YACXX_L2_T1101_C54 length=52
TTTTTGGGGGGGAATTCTCTTGCTTCAACAATAACGTCTCTTTCAGAAGGCA
目的是计算 ATGC 行(第二行和每 4 行)中 G 和 C 元素的百分比。真实文件将有数百万行。 预期的输出应该是:
File1 File2
48.0769 48.0769
46.1538 46.1538
42.3077 42.3077
32.6923 32.6923
51.9231 51.9231
42.3077 42.3077
我已经尝试了下面的代码。它将在特定行中完成的计算输出到与每个原始文件匹配的单个文件。如果未定义输出,它将打印一列。
awk '
FNR==1{ # first record of an input file?
if(o)close(o); # was previous output file? close it
o=FILENAME;sub(/\.fastq/,"_sorted.txt",o) # new output file name
}
{
if(NR%4==2){n=length($1); gc=gsub("[gcGC]", "", $1); print gc/n*100 >o}
}
' *.fastq
我想知道是否有一种方法,使用 awk(尤其是学习工具)将所有计算放在一个文件中,列分隔。
【问题讨论】:
-
欢迎来到 SO,您能否在您的帖子中发布示例输入和预期输出,然后让我们知道。
-
是的,有办法。如果您需要更多信息,请edit您的问题提供简洁、可测试的样本输入和预期输出。