cutの-dと-fオプションの意味は何ですか

cutの-dと-fオプションの意味は何ですか

このパイプラインを解釈するには:

cat /etc/passwd | cut -d : -f 9 2>&1 | sort | uniq 2>&1 | wc -l

私はUnixを自分で教えていますが、それはよく理解していません。ここでは何を意味しますかcut -d : -f 7 2>&1

答え1

cut -d : -f 9 2>&1

これは、より大きな文脈でパイプラインの一部である独立したUnixスタイルのコマンドです。コマンド全体で「|」文字でこれがわかります。

Unixスタイルのコマンドラインは左から右に読みます。実際の実行可能ファイル(またはエイリアス)はですcut。引数はcut"-d:-f 9" で、コマンド全体の stderr 出力は "2>&1" を介して stdout にリダイレクトされます。

UnixまたはLinuxのコマンドラインユーザーに必要な技術の1つは、コマンドとその構文を見つける方法です。したがってman cut。これは、コマンドを呼び出す方法の簡単なマニュアル「manページ」を提供します。標準入力(コマンド全体からパイプとして提供cut)への入力を受け取ります。cat入力は文字で区切られた列として扱われ、レコードには行であるレコードごとにいくつかの数値が含まれます。各行の特定の列を「切り取り」、その列(文字列のみ)を標準出力に配置してsort例に提供します。

Unixスタイルのコマンドは、コマンドラインの特定の部分を表示するために(常にそうではない)「-」文字または「--」文字列を使用します。 '-d' は、次の文字を列区切り文字として使用することを意味します (例: ":"、コロン)。 '-f' は、入力行から列 9 を削除し、文字列を標準出力に出力することを意味します。

リダイレクトフレーズを出力するシェルは、パイプライン全体を2>&1設定し、エラーメッセージ(通常はファイルディスクリプタ2に印刷されます)をファイルディスクリプタ1(stdoutとも呼ばれます)と同じ場所、つまりsort

全体として、パイプラインは共通のタスクを実行します。つまり、ファイル内の一意の文字列数を計算します。cat /etc/passwd"/ etc / passwd"ファイル(ユーザーID属性を定義する有名なUnix / Linux / * BSDファイル)の内容を標準出力に配置します。

cut私のシステムに存在しない列9を削除しました。 「ユーザーID」の数値形式だとしましょう。ユーザーID(またはその他)の文字列表現が入っており、sortオプションはありません。sortこの場合、入力行は語彙的に並べ替えられますが、重複または一意のユーザーIDに従うため、これは重要ではありません。

sortフラグなしで出力をに送信しますuniq。標準入力に入力された各行を監視します。uniqその行が前の行と語彙的に等しい場合は何もしません。そうでない場合はその行を印刷します。入力はアルファベット順に並べられるため、一意の行のみがuniq印刷されます。重複した内容は印刷されません。

wc入力を受け取りましたuniq。 "-l"フラグを使用すると、受信したwc行数のみが印刷されます。つまり、ユーザーID(または/ etc / passwdの列9の値)の固有値の数です。

マイナーモードのみを使用すると、このパイプラインで重複したユーザーID(または何でも)を計算できます。uniq -c一意の行を印刷するだけでなく、連続した行の数も印刷します。これをパイプで連結することで、awk '{if ($2 > 1) {print $0}}数が1より大きい行(つまり、重複行)のみを取得できます。wc -l重複した行のみが計算されます。

関連情報