行の読み取りと削除

行の読み取りと削除

解決すべき問題について質問がありますが、私の代謝は次のとおりです。

入力する

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
$

関連情報