Shell
特定列中不同字元串的列出頻率
我需要弄清楚特定字元串在第 4 列中出現了多少次。
這是我的數據:
25 48656721 48656734 FAM132B ENSCAFT00000019683 4 0.51 X 53969937 53969950 FAM155B ENSCAFT00000026508 5 0.57 3 42203721 42203906 FAM169B ENSCAFT00000017307 5 0.54 36 28947780 28947831 FAM171B ENSCAFT00000046981 5 0.51 10 45080519 45080773 FAM171B ENSCAFT00000003744 9 -0.53 3 61627122 61627446 FAM193A ENSCAFT00000023571 13 0.64 3 61626373 61626466 FAM193A ENSCAFT00000023571 6 0.51 15 55348822 55349196 FAM193A ENSCAFT00000045012 5 0.52
這是我數據的一部分。所以,我希望輸出是:
1 FAM132B 1 FAM155B 1 FAM169B 2 FAM171B 3 FAM193A
依此類推 - 對於我的其餘數據。什麼命令會起作用?
一種簡單的解決方案是使用
awk
拉第 4 列;uniq -c
計算它們;另一個sort
按第二列(舊的第 4 列數據)排列它們:awk '{print $4}' < data | uniq -c | sort -k2
在您的(更新的)範例輸入中,這給出:
1 FAM132B 1 FAM155B 1 FAM169B 2 FAM171B 3 FAM193A
使用
awk
:awk '{a[$4]++} END{for(s in a){print a[s]" "s}}' file
a[$4]++
遞增其索引具有第 4 列名稱的數組元素。當完成文件時,該數組包含第 4 列所有出現的計數器。
END{}
: 表示當 awk 通過文件時執行的程式碼塊。
for(s in a)
通過陣列執行…print a[s]" "s}
…並列印其值和索引。輸出:
1 FAM169B 3 FAM193A 1 FAM132B 1 FAM155B 2 FAM171B