
解決すべき問題について質問がありますが、私の代謝は次のとおりです。
入力する
GTEX-1117F-0003-SM-58Q7G
GTEX-1117F-0003-SM-5DWSB
GTEX-111CU-0826-SM-5EGIJ
GTEX-111CU-0926-SM-5EGIK
GTEX-ZZPU-2726-SM-5NQ8O
GTEX-ZZPU-2626-SM-5E45Y
K-562-SM-2AXVE
K-562-SM-26GMQ
GTEX-1117F
最初の文字が「patient」(たとえば、GTEX-111CU
およびGTEX-ZZPU
)であることを知らせる別の文書がありますK-562
。
どの患者が最も多くのサンプルを持っているかを確認するために固有のコードが必要ですか?
したがって、「患者」のサンプル数を知る必要があります。GTEX-1117F
この場合は2つあります。
出力が必要
GTEX-1117F 2
GTEX-111CU 2
GTEX-ZZPU 2
K-562 2
その後、より多くのサンプルを通して(例えば)「患者」を理解する必要がありますK-562 140
。
答え1
これを使用して、cut
各行からダッシュで区切られた最初の2つのフィールドを抽出し、結果を並べ替え、各固有文字列の発生回数を計算できます。
$ cut -d '-' -f 1,2 file | sort | uniq -c | sort -n | head
2 GTEX-1117F
2 GTEX-111CU
2 GTEX-ZZPU
2 K-562
また、データを渡してsort -n
数値をソートし、head
最良の結果を得るために使用します。
答え2
awk を呼び出してソート遅延を防ぐには、次のようにします。
awk -F- '{c[$1"-"$2]++}END{for (i in c){print i,c[i]}}' file
答え3
計算がより明確になるように別の例を見てみましょう。
GTEX-1117F-0003-SM-58Q7G
GTEX-1117F-0003-SM-58Q7G
GTEX-1117F-0003-SM-5DWSB
GTEX-111CU-0826-SM-5EGIJ
GTEX-111CU-0926-SM-5EGIK
GTEX-ZZPU-2726-SM-5NQ8O
GTEX-ZZPU-2626-SM-5E45Y
K-562-SM-2AXVE
このコマンドは、患者IDの形式が次のとおりであると仮定しますstring-string
。
$ cut -d'-' -f1,2 file | uniq -c | awk -F' ' '{ print $2,$1}' | sort -rk2 | head -1
GTEX-1117F 3
答え4
から始めたらどうでしょうか?
$ for F in `cat patients`; do echo -n "$F " ; grep "^$F" records | wc -l; done
GTEX-1117F 2
GTEX-111CU 2
GTEX-ZZPU 2
K-562 2
$