Extraia uma parte de uma linha e ordene

0

Eu tenho uma saída semelhante à seguinte:

[test output] my name is bob this is a random string
[test output] my name is jim this is a randong string2
[test output] my name is bob this is a randong string3
[test output] my name is alice this is a randong string4
[test output] my name is bob this is a randong string5
[test output] my name is dave this is a randong string6
[test output] my name is jim this is a randong string7
[test output] my name is jim this is a randong string8

Resultado esperado:

my name is bob
my name is jim
my name is alice
my name is dave

Depois que o nome pode ser qualquer string, estou tentando produzir apenas o acima, uma linha para cada nome. Não importa em que ordem eles entram.

Alguém pode ajudar?

    
por Proletariat 08.06.2016 / 18:39

3 respostas

1

com awk :

awk '{ s = $3" "$4" "$5" "$6 };!(s in a){a[s];print s}' <file
    
por 08.06.2016 / 18:45
1

Se você não se importa com a saída classificada, isso também pode ser feito com cut e sort :

cut -d' ' -f3-6 file | sort -u
  • -d at cut especifica o delimitador que é um espaço no seu caso.
  • -f at cut especifica quais campos você deseja gerar. No seu caso, você quer todos os campos de 3 a 6.
  • -u at sort apresenta apenas a primeira das linhas iguais.
por 08.06.2016 / 19:50
0

Você pode usar sed também

sed -e 's/^.*] //g' -e 's/ this.*$'//g file | sort -u
    
por 08.06.2016 / 19:04