我有一个大文件,格式如下:
NC_019859.2 Gnomon exon 58334 58504 . - . GeneID:110014915
NC_019859.2 Gnomon exon 54573 54723 . - . GeneID:110014915
NC_019859.2 Gnomon exon 52624 52680 . - . GeneID:110014915
NC_019859.2 Gnomon exon 52413 52551 . - . GeneID:110014915
NC_019859.2 Gnomon exon 28715 28784 . - . GeneID:110014915
NC_019859.2 Gnomon exon 26768 26814 . - . GeneID:110014915
NC_019859.2 Gnomon exon 25856 25914 . - . GeneID:110014915
NC_019859.2 Gnomon exon 25374 25727 . - . GeneID:110014915
NC_019859.2 Gnomon exon 70772 70841 . - . GeneID:110017276
NC_019859.2 Gnomon exon 70672 70687 . - . GeneID:110017276
NC_019859.2 Gnomon exon 70494 70586 . - . GeneID:110017276
NC_019859.2 Gnomon exon 69020 69335 . - . GeneID:110017276
NC_019859.2 Gnomon exon 68831 68928 . - . GeneID:110017276
NC_019859.2 Gnomon exon 68251 68721 . - . GeneID:110017276
NC_019859.2 Gnomon exon 89665 89909 . + . GeneID:110014398
NC_019859.2 Gnomon exon 91117 91579 . + . GeneID:110014398
NC_019859.2 Gnomon exon 119534 120075 . - . GeneID:101166461
NC_019859.2 Gnomon exon 118137 118262 . - . GeneID:101166461
NC_019859.2 Gnomon exon 117700 117831 . - . GeneID:101166461
NC_019859.2 Gnomon exon 117326 117490 . - . GeneID:101166461
我要跟随期望的投放
NC_019859.2 Gnomon exon 58334 58504 . - . GeneID:110014915 exon_number:1
NC_019859.2 Gnomon exon 54573 54723 . - . GeneID:110014915 exon_number:2
NC_019859.2 Gnomon exon 52624 52680 . - . GeneID:110014915 exon_number:3
NC_019859.2 Gnomon exon 52413 52551 . - . GeneID:110014915 exon_number:4
NC_019859.2 Gnomon exon 28715 28784 . - . GeneID:110014915 exon_number:5
NC_019859.2 Gnomon exon 26768 26814 . - . GeneID:110014915 exon_number:6
NC_019859.2 Gnomon exon 25856 25914 . - . GeneID:110014915 exon_number:7
NC_019859.2 Gnomon exon 25374 25727 . - . GeneID:110014915 exon_number:8
NC_019859.2 Gnomon exon 70772 70841 . - . GeneID:110017276 exon_number:1
NC_019859.2 Gnomon exon 70672 70687 . - . GeneID:110017276 exon_number:2
NC_019859.2 Gnomon exon 70494 70586 . - . GeneID:110017276 exon_number:3
NC_019859.2 Gnomon exon 69020 69335 . - . GeneID:110017276 exon_number:4
NC_019859.2 Gnomon exon 68831 68928 . - . GeneID:110017276 exon_number:5
NC_019859.2 Gnomon exon 68251 68721 . - . GeneID:110017276 exon_number:6
NC_019859.2 Gnomon exon 89665 89909 . + . GeneID:110014398 exon_number:1
NC_019859.2 Gnomon exon 91117 91579 . + . GeneID:110014398 exon_number:2
NC_019859.2 Gnomon exon 119534 120075 . - . GeneID:101166461 exon_number:1
NC_019859.2 Gnomon exon 118137 118262 . - . GeneID:101166461 exon_number:2
NC_019859.2 Gnomon exon 117700 117831 . - . GeneID:101166461 exon_number:3
NC_019859.2 Gnomon exon 117326 117490 . - . GeneID:101166461 exon_number:4
我尝试了此命令并得到了。
awk '{a[$9]++}END{for(i in a){print i, a[i]}}'
GeneID:110014915 8
GeneID:110017276 6
GeneID:110014398 2
GeneID:101166461 4
提前感谢,期待积极的回应。
答案 0 :(得分:3)
请您尝试以下。
awk '{print $0,"exon_number:"++a[$9]}' Input_file
上述代码的解释:
print
:是awk
的开箱即用实用程序,用于打印变量/行。
$0
:在awk
语言中,$0
是当前行(因此打印当前行)。
,
:此处是逗号,分隔符将在$0
和输出的下一个字符串之间输入一个空格。
"exon_number:"
:现在根据OP的输出打印字符串exon_number
。
++a[$9]
:在这里,我创建了一个名为a的数组,其索引是第9列,并且在++
之前先确保其值增加,然后再打印其数组a的值(这将简单地第9列的出现次数)。
如果需要将TAB输出分开,则也可以在上述代码中将awk
更改为awk BEGIN{OFS="\t"}
。
答案 1 :(得分:2)
awk '$NF!=prev{cnt=0; prev=$NF} {print $0, "exon_number:"++cnt}' file
此答案与Ravinders答案之间的区别在于,他将创建一个由输入文件中每个键(GeneID)值索引的数组,而上述内容仅使用2个变量,因此使用的内存更少。他将对未排序的文件起作用,而我的仅在将键值分组在一起的情况下才起作用,如示例输入所示。从功能上讲,只有输入文件很大时,内存问题才重要。