Shell

特定列中不同字元串的列出頻率

  • November 17, 2018

我需要弄清楚特定字元串在第 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

引用自:https://unix.stackexchange.com/questions/231630