この2つの技術を使用して、ファイルから目的の行の2番目の列を取得できることを知っています。
awk '/WORD/ { print $2 }' filename
または
grep WORD filename| cut -f 2 -d ' '
私の質問は次のとおりです
- 上記の2つのコマンドの違いは何ですか?
- どちらが最高のパフォーマンスを持っていますか?
awk
使用と使用の利点は何であり、cut
その逆の場合も同じですか?awk
私たちにはどんな選択が与えられましたかcut
?その逆も同じですか?
答え1
2つのライン間の最も重要な違いは、入力によって異なります。フィールド区切り文字としてcut
単一の文字を使用し(デフォルトはTAB)、この文字が表示されるたびに新しいフィールドが開始されます。しかし、より柔軟です。区切り文字は変数にあり、空の文字列(各入力文字が別々のフィールドを形成する)、単一文字、または正規表現にすることができます。単一の空白文字(デフォルト)の特別な場合は-d
awk
FS
注文するスペース。また、awk
先行スペースは基本的に抑制されます。
比較してください:
$ echo "abc def" | cut -f 2 -d ' '
def
$ echo "abc def" | cut -f 2 -d ' '
$ echo " abc def" | cut -f 2 -d ' '
abc
$ echo "abc def" | awk '{ print $2 }'
def
$ echo "abc def" | awk '{ print $2 }'
def
$ echo " abc def" | awk '{ print $2 }'
def
ここではawk
、 との間の空白の順序に基づいて分割が行われ、各スペースは区切り文字として使用されます。abc
def
cut
あなたが取るものはあなたが達成したいものに依存します。それ以外の場合はcut
小さく、単一目的のツールですが、独自のawk
プログラミング言語があるため、より高速であることを願っています。
答え2
一般に、ツールが専門化されるほど、速度は速くなります。したがって、ほとんどの場合、合計は合計より速く、合計より速く、合計より速く、合計よりcut
速く、合計よりも高速です。より単純なツールのより長いパイプラインをより複雑なツールの単一の呼び出しと比較する場合、経験則はありません。これは大きな入力(数百万行など)にのみ適しています。短い入力の場合、違いはありません。grep
sed
sed
awk
より複雑なツールの利点はもちろん、より多くの作業を実行できることです。
あなたのコマンドは不必要にcatを使用します。代わりにリダイレクトを使用してください(特にベンチマークを実行する前に速度を心配する必要はありませんが、速度が心配な場合)。
<fileName awk '/WORD/ { print $2 }'
<fileName grep WORD | cut -f 2 -d ' '
これらのコマンドはほぼ同じです。違いは次のとおりです。
- awkとgrepがありますさまざまな正規表現構文。 awkと
grep -E
regexpはほぼ同じ構文(拡張正規表現)を持ちます。 cut -d ' '
各個別の空白文字を区切り文字として扱います。 awkのデフォルトの区切り文字は、複数のスペース、タブなどになることができる一連のスペースです。任意のスペースシーケンスを区切り文字として使用することはできませんcut
。 awkで単一のスペースを区切り文字として使用するには、単一のスペースで構成される正規表現ではなく、単一のスペースに一致する正規表現でフィールド区切り文字を設定します(これは「すべてのスペースシーケンス」を意味する特殊な場合です。つまり、デフォルト) :awk -F '[ ]' '/WORD/ {print $2}'
。
^ プログラムの最適化の最初の規則: しないでください。プログラム最適化の2番目の規則(専門家のみ):まだ実行しないでください。—マイケル・ジャクソン
答え3
注文、
cat fileName | awk '/WORD/ { print $2 }'
cat
注文も必要ありません。あなたは試すことができます、
awk '/WORD/ { print $2 }' filename
次のコマンドは、出力をcatからgrepにリダイレクトしてから切り取ります。
cat fileName | grep WORD | cut -f 2 -d ' '
出力リダイレクトを避ける必要があります。 awkはこれを1行で実行しますが、特定の単語を含む行のみを取得し、区切り文字スペースに基づいて列2を印刷するコマンドがcut
必要です。grep
切り取りに失敗した場合は、awkでこれらの操作を実行できます。