com o awk:
$ awk '$2 == "Turtle" {print $1}' turtle.txt
259497
457032
-
$2é o campo a ser selecionado. -
Turtleé o texto para correspondência. -
{print $1}é imprimir o primeiro campo. -
turtle.txté o nome do arquivo de origem.
com sed:
$ <infile sed -E 's/[[:blank:]]+/\n/g;/([^\n]+\n){1}Turtle/([^\n]*).*//;p};d'
Explicado:
-
<infileArquivo de origem -
sed -EUse sed com POSIX ERE (Extended Express Expresions) -
's/[[:blank:]]+/\n/gSubstitua tudo (executa+) do espaço de tabulação por uma nova linha. -
/([^\n]+\n){1}Turtle\n/Se o campon(usen-1here) corresponde aTurtle(exatamente). -
([^\n]*).*//Extrair campo 1 (primeira linha) -
p};d'Imprime o que foi selecionado e exclui tudo em qualquer caso.
Solução geral para qualquer par de campos n e m :
<infile sed -E 's/[[:blank:]]+/\n/g;/([^\n]+\n){1}Turtle/{s/([^\n]+\n){0}([^\n]*).*//;p};d'
-
<infileArquivo de origem -
sed -E 'Para sed com regexes ERE. -
s/[[:blank:]]+/\n/gDivide todas as entradas em linhas em (execuções) de tabulações ou espaços. -
/([^\n]+\n){1}Turtle/Se o espaço do padrão corresponder ao camponth (usen-1({1}) aqui). -
{Inicia uma sequência de comandos. -
s/Inicia uma substituição (um comandos///). -
([^\n]+\n){0}Coincidirm-1({0}) linhas (para o campom). -
([^\n]*)Capture o campo (a linha) para manter a referência de referência. -
.*E corresponde a todo o resto (no espaço padrão (a linha original)). -
//Substitua todos acima (O espaço de padrão) pelo que foi capturado em. -
;p};Imprima. E feche a sequência de comandos. -
dEm qualquer caso, exclua o espaço do padrão e comece novamente. -
'Comando finalizar sed.