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:
-
<infile
Arquivo de origem -
sed -E
Use sed com POSIX ERE (Extended Express Expresions) -
's/[[:blank:]]+/\n/g
Substitua tudo (executa+
) do espaço de tabulação por uma nova linha. -
/([^\n]+\n){1}Turtle\n/
Se o campon
(usen-1
here) 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'
-
<infile
Arquivo de origem -
sed -E '
Para sed com regexes ERE. -
s/[[:blank:]]+/\n/g
Divide 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 campon
th (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. -
d
Em qualquer caso, exclua o espaço do padrão e comece novamente. -
'
Comando finalizar sed.