我有一个以下类型的文本文件:
XLOC_000001 - - TCONS_00000001 - TSS1
XLOC_000002 - - TCONS_00000002 - TSS2
XLOC_000003 - - TCONS_00000003 - TSS3
XLOC_000003 - - TCONS_00000004 - TSS3
XLOC_000004 - - TCONS_00000007 - TSS4
XLOC_000004 - - TCONS_00000008 - TSS4
XLOC_000004 - - TCONS_00000009 - TSS4
XLOC_000004 - - TCONS_00000010 - TSS4
XLOC_000004 - - TCONS_00000011 - TSS4
我想计算第一列中重复ID的数量,并按以下方式打印其他列:
1 XLOC_000001 - - TCONS_00000001 - TSS1
1 XLOC_000002 - - TCONS_00000002 - TSS2
2 XLOC_000003 - - TCONS_00000003 - TSS3
- - TCONS_00000004 - TSS3
5 XLOC_000004 - - TCONS_00000007 - TSS4
- - TCONS_00000008 - TSS4
- - TCONS_00000009 - TSS4
- - TCONS_00000010 - TSS4
- - TCONS_00000011 - TSS4
我用过awk并试过这个
awk '{h[$1]++}; END { for(k in h) print k, h[k] }' newtrails.txt
这只提供了第一列的计数,但是有人可以编辑代码来打印其他列,如上所示吗?
答案 0 :(得分:2)
为此,gsub()
可以成为您最好的朋友:
$ awk 'FNR==NR {a[$1]++; next} seen[$1]++{gsub(/./," ",$1)} {print ($1 in a) ? a[$1] : FS,$0}' file file
1 XLOC_000001 - - TCONS_00000001 - TSS1
1 XLOC_000002 - - TCONS_00000002 - TSS2
2 XLOC_000003 - - TCONS_00000003 - TSS3
- - TCONS_00000004 - TSS3
5 XLOC_000004 - - TCONS_00000007 - TSS4
- - TCONS_00000008 - TSS4
- - TCONS_00000009 - TSS4
- - TCONS_00000010 - TSS4
- - TCONS_00000011 - TSS4
这两次读取文件: