重複確認に1[N]文字を使用

重複確認に1[N]文字を使用

私のファイルにデータセットがあります。

AAAPOL.0001  
AAAPOL.0002  
AAAPRO.0001  
AAAPRO.0002  
AAAPRO.0003  
AAAPRO.0004  
AAAXEL.0002  
AAAJOK.1111  
AAAJOK.2222

最初の6文字を使用してパターンの最初の出現のみが必要なので、最初の6文字にのみ一致する重複/固有性を確認する方法を知る必要があります。

コマンドは上記のデータから返さなければなりません。

AAAPOL.0001   
AAAPRO.0001   
AAAXEL.0002   
AAAJOK.1111 

このオプションにアクセスできませんuniq -w

答え1

行の順序を変更しても問題ない場合は、sort -uソートキーを最初の6文字に設定できます。

sort -u -k 1,1.6

または前の部分に.

sort -t . -u -k 1,1

答え2

awkを使う

あなたの例では、最初の6文字の後にピリオドが続きます。これが常に本当なら、次のようになります。

$ awk -F. '!c[$1]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111

これは.フィールド区切り文字として機能し、最初のフィールドが表示された回数を追跡することによって行われます。

そうでない場合:

$ awk '!c[substr($0, 1, 6)]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111

substr($0, 1, 6)行の最初の6文字。連想配列は、c最初の6文字を見た回数を記録します。したがって、ゼロ以外の場合はc[substr($0, 1, 6)]これらの文字を見ているので、その行は印刷しないでください。 awkでは、ゼロ以外はtrueを意味します。したがって、私たちは以下を使ってテストを裏返します!。つまり、!c[substr($0, 1, 6)]この6つの文字いいえ以前見たことがあります。末尾は、次の行を読む前に++カウントを更新します。c

ユニークを使う

ちなみに、OPとは異なり、uniqオプションがあるバージョンにアクセスできるユーザーの場合は、次のようにします。-w

$ uniq -w6 File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111

関連情報