Como posso imprimir a saída com uma string contendo um campo de um arquivo?

0

Digamos que estou procurando uma linha com a palavra "amarelo" em um arquivo chamado "nome do arquivo". Então eu quero que a saída diga "A cor da camisa é amarela"

Digamos que a linha que eu tirei do arquivo "filename" é assim:

blue green orange black purple white yellow pink

Estou pensando em algo assim, mas sei que não está certo:

cat filename | grep yellow | awk '{print $7; echo "The colour of the shirt is {$7}}
    
por Ernie 31.01.2018 / 12:27

3 respostas

2

Basically, I got as far as an output of a line after using grep. I then want to feed the 7th field of that line and say "The colour of the shirt is "{the output of the 7th field}"

Ok, isso faz mais sentido para mim.

Para imprimir o sétimo campo, junto com uma string, use

awk '{ printf "The color is %s\n", $7 }'

ou

awk '{ print "The color is " $7 }'

(note que não há vírgula ou mais ou qualquer coisa entre a string entre aspas e $7 , as strings são concatenadas no awk simplesmente escrevendo-as uma ao lado da outra).

Você pode pular o grep também e fazer o equivalente dentro de awk :

awk '/some regex/ { printf "the seventh field is %s\n", $7 }'

O awk aceita principalmente as mesmas expressões regulares que grep -E . ("principalmente", já que não consigo lembrar se há algumas pequenas diferenças.) Mas você também pode apontar a correspondência de padrões para apenas um campo específico:

awk '$3 ~ /regex for field three/ { printf "the seventh field is %s\n", $7 }'

Claro que processa todas as linhas correspondentes. Exemplo bobo:

$ awk '$1 ~ /^j/ { printf "the shirt of %s is %s\n", $1, $2 } ' < shirts
the shirt of jimmy is blue
the shirt of joe is red
    
por 31.01.2018 / 12:46
1
awk ‘/yellow/ { print “The colour of the shirt is yellow” }’ < filename 
    
por 31.01.2018 / 12:30
1

Você poderia fazer tudo em awk como Jeff mostrou , ou você poderia facilmente no shell em vez disso:

if grep -qF 'yellow' "filename"; then
    echo 'The colour of the shirt is yellow'
fi

Aqui, -q pára grep da saída de qualquer coisa (estamos interessados apenas no status de saída de grep ) e -F informa grep que estamos pesquisando com uma "cadeia fixa" (não uma expressão regular).

Se você tivesse um arquivo cujo conteúdo fosse

[some unrelated data here]
shirt colour: yellow
[some unrelated shirt data here]

Então você poderia usar

awk '/^shirt colour:/ { print "The colour of the shirt is", $NF }' filename

... para enviar uma mensagem usando a palavra no último campo ( $NF ) da linha que corresponde à expressão regular dada.

Alternativamente,

awk '/^shirt colour:/ { printf("The colour of the shirt is %s\n", $NF) }' filename

Nos últimos dois exemplos, você também pode usar $3 ("o terceiro campo separado por espaços em branco") no lugar de $NF ("o último desses campos").

    
por 31.01.2018 / 12:36

Tags