2016-04-13 6 views
1

テキストファイルで一意の行を検索する必要がありますが、追加の調整が必要です。私は最初の部分(ドットで区切られた部分)が等しい行を重複して考える必要があります。例えば :bashファイル内にユニークな行を見つける

DEASLR98 
DEASLR98.acme.it 

これらの行が等しいが、しかし

sort file.txt | uniq 

はそれらの両方を含みます。完全なドメイン情報(例:DEASLR98.acme.it)を含む行だけを含める方法はありますか? ありがとう!

+0

'DEASLR98.foo.bar'と' DEASLR98.example.com'がある場合、どちらが勝つべきでしょうか? – tripleee

答えて

1

ここでは、各キーの最長一致を維持する単純なAwk uniqの実装を示します。

awk -F . '!($1 in a) || length(a[$1]) < length($0) { a[$1] = $0 } 
    END { for (k in a) print a[k] }' file.txt 

-F .は、各入力行をドットで分割するように指示します。したがって、$1には、最初のドットの前のフィールドが含まれます。このフィールドが配列aにない場合、またはこのキーの既存の値よりも長い場合は、入力行全体($0)を配列に保持します。最後に、配列の値を出力します。明らかに、配列がメモリに収まる必要があります。

関連する問題