Eu tenho:
constant1apple_____constant2asdfkjo___constant3
constant1apple_____constant2fdlkjef___constant3
constant1watermelonconstant2sdlfkeio__constant3
constant1banana____constant2asdfoie___constant3
constant1apple_____constant2soeivmn___constant3
constant1orange____constant2vjflkdslj_constant3
constant1watermelonconstant2xcvlvdiosnconstant3
constant1orange____constant2wieonvow__constant3
constant1apple_____constant2woemnivoiwconstant3
eu quero manter apenas as linhas com as primeiras ocorrências dos nomes das frutas
saída deve ser assim:
constant1apple_____constant2asdfkjo___constant3
constant1watermelonconstant2sdlfkeio__constant3
constant1banana____constant2asdfoie___constant3
constant1orange____constant2vjflkdslj_constant3
anotações importantes:
os nomes das frutas podem ser literalmente qualquer coisa que eu não conheça, mas todos têm o mesmo comprimento
a sequência aleatória após o nome da fruta também pode ser qualquer coisa, mas também tem um comprimento específico
não faço ideia de como fazer
Isso é um pouco mais fácil de fazer com awk (ou perl, ou a maioria das outras linguagens que possuem matrizes associativas):
(os scripts awk são estruturados como
match1 {code1} match2 {code2} ...
A primeira variante especifica apenas a condição de correspondência, mas não o código, usando o padrão implícito{print;}
; a segunda variante faz o oposto, mas obtém a mesma coisa. O que for mais fácil de trabalhar.)Aqui
seen
está uma matriz associativa (um dict / hashmap) que conta quantas vezes o segundo campo foi visto até agora. Para cada linha,seen[x]++
incrementa o valor mantido emseen[x]
e retorna o valor anterior ao mesmo tempo. Se o valor anterior era 0, é a primeira vez que a fruta foi vista.Nesta versão,
substr(input, start, count)
é usado para extrair 10 caracteres de $0 (representando a linha inteira), começando no caractere 10. (Na versão anterior, a chave do array era$2
para a segunda coluna separada por espaço.)awk funciona bem, mas dependendo de quanta filtragem você planeja fazer (se for mais do que apenas extrair a segunda coluna exclusiva), pode ser melhor já começar com uma linguagem de uso mais geral:
Como alternativa, se os nomes puderem ser reordenados com segurança, você poderá usá
uniq
-los para deduplicá-los:E se você precisa apenas dos nomes das frutas, ignorando o resto, pode fazer isso extraindo as colunas primeiro e usando
uniq
o que resta: