Условный grepping

У меня есть файл конфигурации, и его содержимое выглядит примерно так:

    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?

0
17.11.2018, 22:54
2 ответа

Вариант решения Archemar , который предполагает, что me, который вы хотите найти, это $LOGNAME, т.е.имя текущего пользователя:

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

Это сравнит второе|-поле с разделителями со строкой в ​​$LOGNAMEи, если они совпадают, напечатает четвертое поле.

Чтобы также явно игнорировать закомментированные строки:

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

Я всегда предпочитаю awk:

awk -F"|" '{ if ($2~/me/) { print $4 } }' myfile.txt
-1
28.01.2020, 02:49

Теги

Похожие вопросы