条件付き grep

条件付き grep

次の内容を含む構成ファイルがあります。

    Jobname|Type|Silo|Description
    #comment1
    #comment2
    job1|me|silo1|test_job1
    job1|me|silo1|test_job2
    job1|prod|silo1|test_job3

これで、TYPE = meの内容など、ファイルの条件付き内容が必要です。これにはgrepを使用します。

      job_detail=$((cat config_file | grep me | awk '{print $4}'))

この場合、JOBNAMEは一致する文字meを取得するため、最初の行も取得されます。 -vオプションを使用してコメントをエスケープしました。構成ファイルの最初の行は、不明な他のプロセスで使用されるため説明できません。

フルワードマッチを検索する方法はありますか?特定の文字に基づいて単語全体を把握する方法がある場合は、より良いでしょう。

"|"で行を区切り、次にgrepを使用する方法は?

答え1

努力する

awk -F\| -v select="$var" '$2 == select { print $4;}' config_file

どこ

  • $var選択したいフィールドが含まれています。
  • -F\| は awk に | を区切り文字として使用するよう指示し、 |(pipr) をエスケープする必要があります。
  • -v select="$var" $var を awk 変数に転送する (オプション)
  • $2 == select2番目のパラメータが「$ var」の行または選択を選択します。
  • { print $4;}4番目のフィールドを印刷します。

答え2

man grep-w次のフラグが表示されます。

-w, --word-regexp Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore. 

または、| egrep -v Jobnameパイプラインに早く参加してください。

答え3

の変種アルケマのソリューション現在のユーザーのユーザー名であることをme検索しているとします。$LOGNAME

awk -F '|' '$2 == ENVIRON["LOGNAME"] { print $4 }' <config_file

|2番目の区切りフィールドを文字列と比較して$LOGNAME一致すると、4番目のフィールドを印刷します。

また、コメント化された行を明示的に無視します。

awk -F '|' '$1 ~ /^#/ { next } $2 == ENVIRON["LOGNAME"] { print $4 }' <config_file

答え4

私はいつもawkを好む。

awk -F"|" '{ if ($2~/me/) { print $4 } }' myfile.txt

関連情報