Ou
awk '{for (I=1;I<=NF;I++) if ($I == "from") {print $(I+1)};}' file
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
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
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.
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 ']'.