Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns AWK-计数和打印不同的图案_Design Patterns_Awk_Counting - Fatal编程技术网

Design patterns AWK-计数和打印不同的图案

Design patterns AWK-计数和打印不同的图案,design-patterns,awk,counting,Design Patterns,Awk,Counting,我有一个13列的文件。它看起来就像这样: M01562:52:000000000-A9Y4G:1:1101:10000:13082_1:N:0:1 gene_id_8535 100.00 254 0 0 1 254 302 49 3.2e-140 495.0 254 M01562:52:000000000-A9Y4G:1:1101:10000:18672_1:N:0:1 gene_id_118536 100.00 193 0 0 1 1

我有一个13列的文件。它看起来就像这样:

M01562:52:000000000-A9Y4G:1:1101:10000:13082_1:N:0:1    gene_id_8535    100.00  254 0   0   1   254 302 49  3.2e-140    495.0   254
M01562:52:000000000-A9Y4G:1:1101:10000:18672_1:N:0:1    gene_id_118536  100.00  193 0   0   1   193 54  246 1.6e-103    373.0   193
M01562:52:000000000-A9Y4G:1:1101:10000:18672_2:N:0:1    gene_id_118536  98.83   257 3   0   1   257 427 171 3.4e-137    485.0   257
M01562:52:000000000-A9Y4G:1:1101:10000:21866_2:N:0:1    gene_id_120720  100.00  195 0   0   1   195 448 254 4.9e-104    375.0   200
M01562:52:000000000-A9Y4G:1:1101:10000:5922_1:N:0:1     gene_id_17051   100.00  149 0   0   1   149 1849    1701    3.4e-78 289.0   149
M01562:52:000000000-A9Y4G:1:1101:10000:5922_2:N:0:1     gene_id_17051   100.00  123 0   0   1   123 1522    1644    1.3e-62 237.0   123
M01562:52:000000000-A9Y4G:1:1101:10000:6256_1:N:0:1     gene_id_121202  98.73   157 2   0   1   157 179 23  1.9e-81 300.0   157
M01562:52:000000000-A9Y4G:1:1101:10001:11433_1:N:0:1    gene_id_125209  99.07   108 1   0   1   108 118 11  1.8e-53 207.0   108
M01562:52:000000000-A9Y4G:1:1101:10001:11433_2:N:0:1    gene_id_125209  99.15   118 1   0   4   121 1   118 2.9e-59 226.0   121
M01562:52:000000000-A9Y4G:1:1101:10001:17591_1:N:0:1    gene_id_2387    100.00  152 0   0   1   152 1378    1529    2.2e-80 296.0   152
M01562:52:000000000-A9Y4G:1:1101:10001:17591_2:N:0:1    gene_id_2387    100.00  152 0   0   1   152 1529    1378    2.2e-80 296.0   152
M01562:52:000000000-A9Y4G:1:1101:10001:17844_1:N:0:1    gene_id_9456    100.00  100 0   0   1   100 176 275 8.5e-50 194.0   100
gene_id_9456           2
gene_id_125209         5
gene_id_2387           2
awk '{cnt[$2]++} END{for (gene in cnt) print gene, cnt[gene]}' file
现在,我需要做的是计算第二列,即一些基因ID,然后打印到一个单独的文件中,该文件包含每个基因ID及其在文件中出现的重复次数或次数。就这样,

M01562:52:000000000-A9Y4G:1:1101:10000:13082_1:N:0:1    gene_id_8535    100.00  254 0   0   1   254 302 49  3.2e-140    495.0   254
M01562:52:000000000-A9Y4G:1:1101:10000:18672_1:N:0:1    gene_id_118536  100.00  193 0   0   1   193 54  246 1.6e-103    373.0   193
M01562:52:000000000-A9Y4G:1:1101:10000:18672_2:N:0:1    gene_id_118536  98.83   257 3   0   1   257 427 171 3.4e-137    485.0   257
M01562:52:000000000-A9Y4G:1:1101:10000:21866_2:N:0:1    gene_id_120720  100.00  195 0   0   1   195 448 254 4.9e-104    375.0   200
M01562:52:000000000-A9Y4G:1:1101:10000:5922_1:N:0:1     gene_id_17051   100.00  149 0   0   1   149 1849    1701    3.4e-78 289.0   149
M01562:52:000000000-A9Y4G:1:1101:10000:5922_2:N:0:1     gene_id_17051   100.00  123 0   0   1   123 1522    1644    1.3e-62 237.0   123
M01562:52:000000000-A9Y4G:1:1101:10000:6256_1:N:0:1     gene_id_121202  98.73   157 2   0   1   157 179 23  1.9e-81 300.0   157
M01562:52:000000000-A9Y4G:1:1101:10001:11433_1:N:0:1    gene_id_125209  99.07   108 1   0   1   108 118 11  1.8e-53 207.0   108
M01562:52:000000000-A9Y4G:1:1101:10001:11433_2:N:0:1    gene_id_125209  99.15   118 1   0   4   121 1   118 2.9e-59 226.0   121
M01562:52:000000000-A9Y4G:1:1101:10001:17591_1:N:0:1    gene_id_2387    100.00  152 0   0   1   152 1378    1529    2.2e-80 296.0   152
M01562:52:000000000-A9Y4G:1:1101:10001:17591_2:N:0:1    gene_id_2387    100.00  152 0   0   1   152 1529    1378    2.2e-80 296.0   152
M01562:52:000000000-A9Y4G:1:1101:10001:17844_1:N:0:1    gene_id_9456    100.00  100 0   0   1   100 176 275 8.5e-50 194.0   100
gene_id_9456           2
gene_id_125209         5
gene_id_2387           2
awk '{cnt[$2]++} END{for (gene in cnt) print gene, cnt[gene]}' file
基因ID具有不同的数字if字符,并且完全不同,所以我尝试过的一切都不起作用


还有,有人能推荐一些真正好的网站来了解awk吗?我一直在阅读,但希望有更多的资料来源。

以下
awk
script
countGenes。awk
可以完成这项工作:

#
#  countGenes.awk
#

BEGIN {
    columns = 13
    geneColumn = 2
}

#  select only lines with the expected number of fields    
(NF == columns) {
    geneCounts[$geneColumn]++
}

END {
    #  loop through the associative table of counts
    for (gene in geneCounts) {
        #  write count to file
        fileName = "count_" gene ".txt"
        printf "%s\t%d\n", gene, geneCounts[gene] >fileName

        #  for logging
        printf "%s\t%d\n", gene, geneCounts[gene]
    }
}
使用以下命令运行脚本:

awk -f countGenes.awk testDataGenes.txt

很可能你需要的就是这样的东西:

M01562:52:000000000-A9Y4G:1:1101:10000:13082_1:N:0:1    gene_id_8535    100.00  254 0   0   1   254 302 49  3.2e-140    495.0   254
M01562:52:000000000-A9Y4G:1:1101:10000:18672_1:N:0:1    gene_id_118536  100.00  193 0   0   1   193 54  246 1.6e-103    373.0   193
M01562:52:000000000-A9Y4G:1:1101:10000:18672_2:N:0:1    gene_id_118536  98.83   257 3   0   1   257 427 171 3.4e-137    485.0   257
M01562:52:000000000-A9Y4G:1:1101:10000:21866_2:N:0:1    gene_id_120720  100.00  195 0   0   1   195 448 254 4.9e-104    375.0   200
M01562:52:000000000-A9Y4G:1:1101:10000:5922_1:N:0:1     gene_id_17051   100.00  149 0   0   1   149 1849    1701    3.4e-78 289.0   149
M01562:52:000000000-A9Y4G:1:1101:10000:5922_2:N:0:1     gene_id_17051   100.00  123 0   0   1   123 1522    1644    1.3e-62 237.0   123
M01562:52:000000000-A9Y4G:1:1101:10000:6256_1:N:0:1     gene_id_121202  98.73   157 2   0   1   157 179 23  1.9e-81 300.0   157
M01562:52:000000000-A9Y4G:1:1101:10001:11433_1:N:0:1    gene_id_125209  99.07   108 1   0   1   108 118 11  1.8e-53 207.0   108
M01562:52:000000000-A9Y4G:1:1101:10001:11433_2:N:0:1    gene_id_125209  99.15   118 1   0   4   121 1   118 2.9e-59 226.0   121
M01562:52:000000000-A9Y4G:1:1101:10001:17591_1:N:0:1    gene_id_2387    100.00  152 0   0   1   152 1378    1529    2.2e-80 296.0   152
M01562:52:000000000-A9Y4G:1:1101:10001:17591_2:N:0:1    gene_id_2387    100.00  152 0   0   1   152 1529    1378    2.2e-80 296.0   152
M01562:52:000000000-A9Y4G:1:1101:10001:17844_1:N:0:1    gene_id_9456    100.00  100 0   0   1   100 176 275 8.5e-50 194.0   100
gene_id_9456           2
gene_id_125209         5
gene_id_2387           2
awk '{cnt[$2]++} END{for (gene in cnt) print gene, cnt[gene]}' file

但如果没有样本输入和预期输出,这只是猜测。

不要告诉我们“类似”您的输入或最佳情况,您将得到“类似”的答案。告诉我们您的数据的粗略格式是不够的。编辑您的问题,以包括一小部分(5-10行)实际代表性示例输入和相关的预期输出,我们可以针对这些输出运行脚本,并将其输出与我们想要测试解决方案的结果进行比较。最好的awk资源是Arnold Robbins的第三版《有效的awk编程》。@EdMorton:你的信息很有用,你的提示很有价值。但语气有点粗鲁,并没有真正邀请第一次使用的用户留下来。第一个问题MPR6做得很好。@Axelkeper同意,我的语气有点粗鲁,但我不同意OP在发布问题时做得很好。我们都知道我们想要什么样的信息来帮助我们回答问题。这与在这个网站上发帖没有什么特别的关系,只是在一般情况下向人们寻求帮助。因此,有人在没有这些信息的情况下发布了一个问题,他们告诉我,他们不会费心去帮助我们帮助他们,他们希望我们为他们做所有的工作。我只是用我的数据示例编辑了我的帖子,尽管你们两人提供的答案非常有用。再次感谢!是的,很抱歉。样本输出不基于样本输入,但我已经纠正了这一点,并删除了“第1列第2列”。谢谢你的提示!下一次我肯定会写一篇更好的文章。非常紧凑的“代码高尔夫”解决方案!就像我在回答中建议的脚本一样。@AxelKemper“代码高尔夫”解决方案将使用单字符变量名,这只是一个合理、简洁的解决方案。