10

これは確かに些細な作業であるに違いありませんが、awk今朝は頭を悩ませていました。次のような形式のファイルがあります。

pep> AEYTCVAETK     2   genes ADUm.1024,ADUm.5198,ADUm.750
pep> AIQLTGK        1   genes ADUm.1999,ADUm.3560
pep> AIQLTGK        8   genes ADUm.1999,ADUm.3560
pep> KHEPPTEVDIEGR  5   genes ADUm.367
pep> VSSILEDKTT     9   genes ADUm.1192,ADUm.2731
pep> AIQLTGK        10  genes ADUm.1999,ADUm.3560
pep> VSSILEDKILSR   3   genes ADUm.2146,ADUm.5750
pep> VSSILEDKILSR   2   genes ADUm.2146,ADUm.5750

列 2 のペプチドの個別の値ごとに行を出力したいと思います。つまり、上記の入力は次のようになります。

pep> AEYTCVAETK     2   genes ADUm.1024,ADUm.5198,ADUm.750
pep> AIQLTGK        1   genes ADUm.1999,ADUm.3560
pep> KHEPPTEVDIEGR  5   genes ADUm.367
pep> VSSILEDKTT     9   genes ADUm.1192,ADUm.2731
pep> VSSILEDKILSR   3   genes ADUm.2146,ADUm.5750

これは私がこれまでに試したことですが、明らかに私が必要としているものもありません:

awk '{print $2}' file | sort | uniq
# Prints only the peptides...
awk '{print $0, "\t", $1}' file |sort | uniq -u -f 4
# Altogether omits peptides which are not unique...

最後にもう 1 つ、他のペプチドの部分文字列であるペプチドを個別の値 (VSSILED と VSSILEDKILSR など) として扱う必要があります。ありがとう :)

4

4 に答える 4

20

並べ替えを使用するだけです。

sort -k 2,2 -u file

-u(必要に応じて)重複するエントリを削除-k 2,2し、フィールド2だけを並べ替えフィールドにします(したがって、重複をチェックするときに残りを無視します)。

于 2012-08-21T10:23:38.407 に答える
15

使用する1つの方法awk

awk '!array[$2]++' file.txt

結果:

pep> AEYTCVAETK     2   genes ADUm.1024,ADUm.5198,ADUm.750
pep> AIQLTGK        1   genes ADUm.1999,ADUm.3560
pep> KHEPPTEVDIEGR  5   genes ADUm.367
pep> VSSILEDKTT     9   genes ADUm.1192,ADUm.2731
pep> VSSILEDKILSR   3   genes ADUm.2146,ADUm.5750
于 2012-08-21T10:22:23.430 に答える
2

これにはPerlを使用します。

perl -nae 'print unless exists $seen{$F[1]}; undef $seen{$F[1]}' < input.txt

スイッチはn入力に対して行ごとに機能し、スイッチは行を配列aに分割します。@F

于 2012-08-21T10:20:45.303 に答える
2
awk '{if($2==temp){next;}else{print}temp=$2}' your_file

以下でテスト:

> awk '{if($2==temp){next;}else{print}temp=$2}' temp
pep> AEYTCVAETK         2       genes ADUm.1024,ADUm.5198,ADUm.750
pep> AIQLTGK            1       genes ADUm.1999,ADUm.3560
pep> KHEPPTEVDIEGR      5       genes ADUm.367
pep> VSSILEDKTT         9       genes ADUm.1192,ADUm.2731
pep> AIQLTGK            10      genes ADUm.1999,ADUm.3560
pep> VSSILEDKILSR       3       genes ADUm.2146,ADUm.5750
于 2012-08-21T10:35:40.083 に答える