次の内容を含む構成ファイルがあります。
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 == select
2番目のパラメータが「$ 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