obtém valor após uma palavra específica

4

Eu tenho este arquivo

1 deiauk David Smith from California 12 58
2 edvin from Nevada 12 5 8 95 2 48 5
3 jaco My Name Is Jacob I'm from NY 5  6  845 156 585
4 from Miami

E eu preciso obter valores após a palavra específica from é possível fazer isso no shell? Minha saída deve ser

California
Nevada
NY
Miami
    
por user3334375 03.06.2015 / 00:06

4 respostas

5

Ou

awk '{for (I=1;I<=NF;I++) if ($I == "from") {print $(I+1)};}' file

    
por 03.06.2015 / 00:26
11

Usando grep , isso pode ser feito da seguinte forma:

grep -oP "from\s+\K\w+" input.txt

Aqui,

-o  ==>  option for printing only the matching part of the line
-P  ==>  use perl-regexp
\K  ==>  do not print that comes before \K (zero-width look-behind assertion)
\w  ==>  match word characters
    
por 03.06.2015 / 00:24
4

Uma solução legível seria:

awk -F '${fixed_string}' '{print $2}' file | awk '{print $1}'

O que faz:

  • -F '${fixed_string}' separa a entrada antes e depois da string dada. Portanto, com o seu arquivo, quando definirmos fixed_string='from' , print $2 fornecerá:

    California 12 58 Nevada 12 5 8 95 2 48 5 NY 5 6 845 156 585 Miami

  • Agora, tudo o que você precisa é a primeira coluna dessa entrada. Então nós canalizamos a saída do primeiro awk para awk e imprimimos a primeira coluna.

por 15.08.2017 / 19:46
1

Este marcador sed one faz isso:

 sed '/from/s/.*from \([^ ][^ ]*\)[ ]*.*//' input

Estou presumindo um caractere de espaço antes da string literal "from". Se você quiser ter campos separados por tabulações, pode ser necessário inserir um caractere de tabulação em todas as três expressões de correspondência de intervalo de caracteres, entre '[' e ']'.

    
por 03.06.2015 / 00:14

Tags