Conditional grepping

0

Eu tenho um arquivo de configuração e seu conteúdo é algo como abaixo:

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

Agora preciso do conteúdo condicional do arquivo, digamos o conteúdo com TYPE = me. Por isso estou usando um grep comigo:

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

Neste caso, também estou recebendo a primeira linha, já que JOBNAME está obtendo o caractere correspondente. Eu escapei de comentários com opções -v. Não posso comentar a primeira linha do arquivo de configuração, pois ele é usado por outros processos desconhecidos.

Existe alguma maneira de eu poder fazer a correspondência da palavra inteira? seria melhor se houvesse uma maneira de entender a palavra inteira com um caractere particular como condição.

Uma maneira de dividir a linha com '|' e depois grep?

    
por NishantM 04.12.2015 / 04:54

3 respostas

2

tente

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

onde

  • $var contém o campo que você deseja selecionar
  • -F \ | diga ao awk para usar | como separador | (pipr) deve ser escapado.
  • -v select="$ var" transfere variável $ var para awk (selecione)
  • $2 == select seleciona a linha cujo segundo argumento é "$ var" ou selecione.
  • { print $4;} imprime o quarto campo.
por 04.12.2015 / 08:19
0

man grep mostrará o sinal -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. 

Ou, cole | egrep -v Jobname no início da sua piplina.

    
por 04.12.2015 / 08:03
0

Uma variação da solução do Archemar que supõe que me que você deseja pesquisar é $LOGNAME , ou seja, o nome de usuário do usuário atual:

awk -F '|' '$2 == ENVIRON["LOGNAME"] { print $4 }' <config_file
    
por 17.11.2018 / 21:58