sustituir separador script manejo especiales comando caracteres campos cadenas cadena buscar bash shell awk uniq

separador - Salida de línea completa una vez para cada valor único de una columna(Bash)



sed linux (4)

Solo use sort:

sort -k 2,2 -u file

El -u elimina las entradas duplicadas (como quería), y -k 2,2 hace que el campo 2 sea el campo de clasificación (y por lo tanto ignora el resto cuando busca duplicados).

Esto seguramente debe ser una tarea trivial con awk o no, pero me ha dejado rascándome la cabeza esta mañana. Tengo un archivo con un formato similar a este:

pep> AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750 pep> AIQLTGK 1 genes ADUm.1999,ADUm.3560 pep> AIQLTGK 8 genes ADUm.1999,ADUm.3560 pep> KHEPPTEVDIEGR 5 genes ADUm.367 pep> VSSILEDKTT 9 genes ADUm.1192,ADUm.2731 pep> AIQLTGK 10 genes ADUm.1999,ADUm.3560 pep> VSSILEDKILSR 3 genes ADUm.2146,ADUm.5750 pep> VSSILEDKILSR 2 genes ADUm.2146,ADUm.5750

Me gustaría imprimir una línea para cada valor distinto de los péptidos en la columna 2, lo que significa que la entrada anterior se convertiría en:

pep> AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750 pep> AIQLTGK 1 genes ADUm.1999,ADUm.3560 pep> KHEPPTEVDIEGR 5 genes ADUm.367 pep> VSSILEDKTT 9 genes ADUm.1192,ADUm.2731 pep> VSSILEDKILSR 3 genes ADUm.2146,ADUm.5750

Esto es lo que he intentado hasta ahora, pero claramente tampoco hace lo que necesito:

awk ''{print $2}'' file | sort | uniq # Prints only the peptides... awk ''{print $0, "/t", $1}'' file |sort | uniq -u -f 4 # Altogether omits peptides which are not unique...

Una última cosa, necesitará tratar los péptidos que son subcadenas de otros péptidos como valores distintos (por ejemplo, VSSILED y VSSILEDKILSR). Gracias :)


Una forma de usar awk :

awk ''!array[$2]++'' file.txt

Resultados:

pep> AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750 pep> AIQLTGK 1 genes ADUm.1999,ADUm.3560 pep> KHEPPTEVDIEGR 5 genes ADUm.367 pep> VSSILEDKTT 9 genes ADUm.1192,ADUm.2731 pep> VSSILEDKILSR 3 genes ADUm.2146,ADUm.5750


Usaría Perl para esto:

perl -nae ''print unless exists $seen{$F[1]}; undef $seen{$F[1]}'' < input.txt

El conmutador n funciona línea por línea con la entrada, el conmutador divide la línea en la matriz @F .


awk ''{if($2==temp){next;}else{print}temp=$2}'' your_file

probado a continuación:

> awk ''{if($2==temp){next;}else{print}temp=$2}'' temp pep> AEYTCVAETK 2 genes ADUm.1024,ADUm.5198,ADUm.750 pep> AIQLTGK 1 genes ADUm.1999,ADUm.3560 pep> KHEPPTEVDIEGR 5 genes ADUm.367 pep> VSSILEDKTT 9 genes ADUm.1192,ADUm.2731 pep> AIQLTGK 10 genes ADUm.1999,ADUm.3560 pep> VSSILEDKILSR 3 genes ADUm.2146,ADUm.5750