com awk
:
awk '{ s = $3" "$4" "$5" "$6 };!(s in a){a[s];print s}' <file
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?
com awk
:
awk '{ s = $3" "$4" "$5" "$6 };!(s in a){a[s];print s}' <file
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. Você pode usar sed
também
sed -e 's/^.*] //g' -e 's/ this.*$'//g file | sort -u
Tags text-processing awk