私のファイルにデータセットがあります。
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