特定の列に異なる文字列がリストされる頻度

特定の列に異なる文字列がリストされる頻度

列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

残りのデータについても同様です。有効なコマンドは何ですか?

答え1

awk簡単な解決策は、列4でプールを使用し、列2(以前の列4データ)に基づいてソートすることですuniq -csort

awk '{print $4}' < data | uniq -c | sort -k2

(更新された)入力例では、次のようになります。

  1 FAM132B
  1 FAM155B
  1 FAM169B
  2 FAM171B
  3 FAM193A

答え2

使用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

答え3

区切り文字が単一のスペースであると仮定します。

cut -d' ' -f4 infile | sort | uniq -c

uniqフィルタに注意してください近いsort行と一致するため、まず次の入力を使用する必要があります。

FAM193A
FAM155B
FAM169B
FAM171B
FAM132B
FAM193A
FAM132A
FAM132B
FAM155B
FAM169B
FAM171B
FAM171A
FAM193A
FAM132A

以下を使用してsort | uniq -c製造します。

  2 FAM132A
  2 FAM132B
  2 FAM155B
  2 FAM169B
  1 FAM171A
  2 FAM171B
  3 FAM193A

またuniq -c | sort -k2生産:

  1 FAM132A
  1 FAM132A
  1 FAM132B
  1 FAM132B
  1 FAM155B
  1 FAM155B
  1 FAM169B
  1 FAM169B
  1 FAM171A
  1 FAM171B
  1 FAM171B
  1 FAM193A
  1 FAM193A
  1 FAM193A

関連情報