Linuxコマンドラインユーザーであり、テキストファイルでの作業が含まれる場合は、さまざまな状況で非常に役立つ可能性のあるコマンドラインユーティリティが多数あることを知っておく必要があります(まだの場合)。たとえば、ファイル内の繰り返し行を報告または削除する「uniq」と呼ばれるツールがあります。
この記事では、わかりやすい例を通して「uniq」について説明します。ただし、その前に、このチュートリアルで説明されているすべての例と手順がUbuntu16.04LTSでテストされていることを言及する価値があります。
LinuxUniqコマンド
冒頭ですでに述べたように、uniqコマンドは繰り返し行を報告または省略します。このコマンドの一般的な構文は次のとおりです。
uniq [OPTION] ... [INPUT [OUTPUT]]
ユーティリティのマニュアルページによると、「INPUT(または標準入力)から隣接する一致する行をフィルタリングし、OUTPUT(または標準出力)に書き込みます。オプションがない場合、一致する行は最初のオカレンスにマージされます。」
以下は、ツールをよりよく理解するのに役立ついくつかの例です。
1。 uniqコマンドを使用して繰り返し行を削除する方法
ファイルに次の行が含まれているとします。
明らかに、各行が繰り返されています。次に、このファイルでUniqを実行して、何が起こるかを見てみましょう。
uniq file1
ご覧のとおり、コマンドが生成する出力には繰り返し行が含まれていません。元のファイル(この場合は「file1」)は影響を受けないことに注意してください。保存して作業する場合は、ツールの出力を別のファイルにリダイレクトできます。
2。各行の繰り返し回数を表示する方法
必要に応じて、行が繰り返される回数を出力にuniq表示することもできます。これは、 -cを使用して実行できます。 コマンドラインオプション。たとえば、次のコマンド:
uniq -c file1
次の出力を生成します:
ご覧のとおり、各行の繰り返し回数は、出力の前に接頭辞が付いています。
3。 uniqを使用して重複行のみを印刷する方法
uniqで重複行のみを印刷するには、 -Dを使用します コマンドラインオプション。たとえば、file1の下部に余分な行が含まれているとします(この行は繰り返されないことに注意してください)。
ここで、次のコマンドを実行すると:
uniq -D file1
次の出力が生成されます:
ご覧のとおり、-Dオプションを使用すると、すべての繰り返しを含む、出力内のすべての繰り返し行がuniqに表示されます。より適切に分離するために、繰り返される行の各グループの後に空の行を含めることができます。これは、 -all-repeatedを使用して実行できます。 オプション。
uniq --all-repeated [=METHOD] file1
このオプションでは、ユーザーがメソッド名を入力する必要があります。値はprependである可能性があります (空の行を前に付ける)または別の (空の行を追加するため)。たとえば、 prependを使用したこのオプションの動作は次のとおりです。 メソッド。
次に進みます。ツールでグループごとに重複する行を1つだけ表示する場合は、 -dに進むことができます。 オプション。その例を次に示します。
明らかに、各グループからの1行だけが出力に表示されました。
4。 uniqで最初のいくつかのフィールドの比較を回避する方法
状況によっては、2つの線の類似性がそれらの線のごく一部によって定義される場合があります。たとえば、次のファイルの内容について考えてみます。
ここで、2番目のフィールド(HTFまたはFF)に基づいて行が類似または異なると見なされ、これをuniqに伝達したい場合、これは -fを使用して実行できます。 コマンドラインオプション。
uniq -f [number-of-fields-to-skip] [file-name]
-fオプションでは、コマンドでスキップするフィールドの数を表す数値を渡す必要があります。たとえば、この場合、uniqにスキップさせたい最初のフィールドであるため、引数として「1」を-fに渡すことができます。
uniq -f 1 file1
出力は、uniqがそれぞれの2番目のフィールドに基づいて1行目と3行目の両方を繰り返しと見なしたことを明確に示しています。
5。繰り返しグループを空の行で区切って、uniqにすべての行を表示させる方法
繰り返しの行のグループを空の行で区切ってすべての行を表示する必要がある場合は、 -groupを使用できます。 オプション。 --all-repeated のように 前に説明したオプション、-group また、空の行の位置を指定する必要があります( prepend 、追加 、または両方 。
次に例を示します:
前のセクションですでに説明した-fオプションに注意してください。
6。 uniqに非反復行のみを印刷させる方法
これまでに理解したように、デフォルトでは、uniqコマンドは出力に繰り返し行のみを表示します。ただし、必要に応じて、代わりに、繰り返されない行または一意の行のみを表示するようにすることができます。これは、 -uを使用して実行できます コマンドラインオプション。
uniq -u [file-name]
つまり、この場合:
uniq -u file1
次に例を示します:
セクション/ポイント番号4ですでに説明した-fオプションに注意してください。
7。設定された初期文字数の比較を回避するためにuniqを作成する方法
以前の例の1つで、uniqスキップフィールドを作成する方法について説明しました。ただし、必要に応じて、ツールに設定された数の最初の文字をスキップさせることもできます。この機能には、 -sを使用してアクセスできます。 コマンドラインオプション。
uniq-s[number-of-char]ファイル名
たとえば、ファイルに次の行が含まれているとします。
ここで、uniqで比較する前に各行の最初の4文字をスキップする場合は、次の方法で実行できます。
uniq -s 4 file1
上記のコマンドの動作は次のとおりです:
したがって、元々そこにあった4行目(faq_forge)が出力でスキップされていることがわかります。これは、最初の4文字をスキップした後、3行目と4行目が同じであるため、uniqによって繰り返されると見なされるためです。
8。設定された文字数に比較を制限する方法
文字をスキップする方法と同様に、uniqに比較を設定された文字数に制限するように依頼することもできます。このためには、 -wを使用する必要があります コマンドラインオプション。
uniq -w[num-of-chars][ファイル名]
たとえば、ファイルに次の行が含まれているとします。
これで、比較を最初の3文字に制限する必要がある場合、これは次の方法で実行できます。
uniq -w 3 file1
上記のコマンドの動作は次のとおりです:
3行目と4行目の最初の3文字は同じであるため、これらの行は繰り返されていると見なされました。したがって、3番目のものだけが出力に表示されます。
9。 uniq比較で大文字と小文字を区別しないようにする方法
デフォルトでは、uniqが実行する比較では、大文字と小文字が区別されます。ただし、 -i を使用して、プロセスで大文字と小文字を区別しないようにすることができます。 コマンドラインオプション。
たとえば、前のセクションで説明したのと同じケースを考えてみましょう。4行目は大文字のH、O、Wで始まります。
前のセクションで使用したのと同じコマンドを実行しようとすると、出力が異なることがわかります。
これは、3行目と4行目の最初の3文字が、大文字と小文字が異なるためにuniqで異なるためです。これらの行にある状況では、-iコマンドラインオプションを使用して、大文字と小文字を区別せずに比較を行うことができます。
10。 uniq出力をNULで終了させる方法
デフォルトでは、uniqが生成する出力は改行で終了します。ただし、必要に応じて、代わりにNULで終了する出力を使用できます(スクリプトでuniqを処理する場合に便利です)。これは、 -zを使用して可能になります コマンドラインオプション。
uniq-z[ファイル名]
結論
uniqコマンドが提供するコマンドラインオプションのほとんどすべてをカバーしたので、ここで説明したことをすべて練習すれば、uniqがどのように機能し、どの機能が提供されるかをしっかりと理解する必要があります。いつものように、質問や疑問がある場合は、最初にコマンドのマニュアルページを確認してください。