-1

したがって、この質問は私を悩ませており、他に何百万ものプロジェクトを抱えているので、これを解決したいと思っていました. これまでのところ、私は答えを見つけることができませんでした。とてもシンプルに思えます。私が使用した:

awk '$1' merged_counts.txt |sort|uniq -d|wc

216行になりました。しかし、その数は正しくありません。私が使用する場合

more merged_counts.txt|cut -f 1|sort|uniq -d|wc

正しい 271 行が表示されます。私が使用する場合

awk '{print $1}' merged_counts.txt |sort|uniq -d|wc

271 行も表示されますが、残りのフィールドも失われます。初歩的なことのように見えるものに対して、なぜこのように動作するのかわかりません。ヘルプ/提案をありがとう。きっと何かを見落としているに違いない。

ファイルの例:

B3GALT1 72  128 65  124 87  118 102 117 38  106 87  115 27  20  89  30
AMY1A   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
PSENEN  654 459 648 462 508 399 537 532 696 460 625 473 621 322 633 434

遺伝子「AMY1A」は、両方の DNA 鎖に注釈が付けられている遺伝子の 1 つであり、ファイルに 2 回表示されます。

4

3 に答える 3

2

コメントであなたが言っているのを見たI need to keep the entire line, but I need to filter for duplicates based only on the first fieldので、それから始めましょう。さらに、フィールドが空白で区切られており、重複が発生したときに常に最初の行を印刷したいと仮定します。

その場合に使用する awk コマンドは次のようになります。

awk '!seen[$1]++' file

ここで、説明、入力、および出力で質問を更新して、他に何が必要かをお知らせください。

于 2013-10-30T16:04:41.170 に答える
2

awk '$1'(混同しないでくださいawk '{print $1}') は、空の行または空白のみを含む行、または最初のフィールドが数値 0 に評価される行を除くすべてをcut -f 1出力します。行。

于 2013-10-30T15:40:11.000 に答える
1

cutフィールドを区切るために単一の文字 (tabデフォルトではオプションで変更可能) を使用し、一連の空白を使用します (デフォルトではオプションで変更可能)。-dawk-F

awk '$1'$1最初のフィールドだけでなく、false と見なされない場合は行全体を出力します。これにより、重複する行が少なくなり (2 つの行の最初のフィールドは同じでも、後続のフィールドが異なる可能性があるため)、行数が少なくなります。

于 2013-10-30T15:28:25.520 に答える