У меня есть файл конфигурации, и его содержимое выглядит примерно так:
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 получает соответствующий мне символ. Я избежал комментариев с помощью опции -v. Я не могу комментировать первую строку файла конфигурации, так как она используется другими неизвестными процессами.
Есть ли способ найти совпадение всего слова с помощью поиска? было бы лучше, если бы есть способ grep всего слова с определенным символом в качестве условия.
Способ разделить строку с помощью '|' а затем grep?
Вариант решения Archemar , который предполагает, что me
, который вы хотите найти, это $LOGNAME
, т.е.имя текущего пользователя:
awk -F '|' '$2 == ENVIRON["LOGNAME"] { print $4 }' <config_file
Это сравнит второе|
-поле с разделителями со строкой в $LOGNAME
и, если они совпадают, напечатает четвертое поле.
Чтобы также явно игнорировать закомментированные строки:
awk -F '|' '$1 ~ /^#/ { next } $2 == ENVIRON["LOGNAME"] { print $4 }' <config_file
Я всегда предпочитаю awk:
awk -F"|" '{ if ($2~/me/) { print $4 } }' myfile.txt