列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 -c
。sort
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