0

列 2 の少なくとも 2 つの一意の値によって共有される列 2 の値のみを抽出したいと考えています。

同じ入力 (この場合は 3 つのタブで区切られた列) を使用します。

waterline-n    below-sheath-v    14.8097 
dock-n    below-sheath-v     14.5095 
waterline-n    below-steel-n    11.0330 
picnic-n    below-steel-n    12.2277 
wavefront-n    at-part-of-variance-n    18.4888 
wavefront-n    between-part-of-variance-n    17.0656
audience-b    between-part-of-variance-n    17.6346 
game-n    between-part-of-variance-n    14.9652 
whereabouts-n    become-rediscovery-n    11.3556 
whereabouts-n    get-tee-n    10.9091

次の目的の出力の場合:

waterline-n    below-sheath-v    14.8097 
dock-n    below-sheath-v     14.5095 
waterline-n    below-steel-n    11.0330
picnic-n    below-steel-n    12.2277 
wavefront-n    between-part-of-variance-n    17.0656 
audience-b    between-part-of-variance-n    17.6346 
game-n    between-part-of-variance-n    14.9652

grep を使用してこれを行うことは可能ですか?

4

2 に答える 2

2

awk配列を使用してファイルを 2 回読み取ります。
これだけでは難しいと思いますgrep

awk 'FNR==NR {a[$2]++;next} a[$2]>1' file file
waterline-n    below-sheath-v    14.8097
dock-n    below-sheath-v     14.5095
waterline-n    below-steel-n    11.0330
picnic-n    below-steel-n    12.2277
wavefront-n    between-part-of-variance-n    17.0656
audience-b    between-part-of-variance-n    17.6346
game-n    between-part-of-variance-n    14.9652

最初のパスFNR==NRでは、列 2 のすべての値を配列に追加し、ヒットが通過するたびに値を増やします。
パス 2 では、配列を調べてヒット数が複数かどうかを確認し、OK であればその行を出力します。

于 2013-10-31T12:17:34.363 に答える