Modificar valores en una columna según el número de dos puntos que contiene

Modificar valores en una columna según el número de dos puntos que contiene

Manipularía el contenido de la segunda columna según la cantidad de dos puntos que contiene. Si el segundo campo contiene más de dos puntos, entonces requeriría el contenido antes de los primeros dos puntos; de lo contrario, requeriría el valor completo.

#Input    
1 1131:11854476:4:1$ 0 114476 1 4
5 367504:11862778:4:2$ 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575:38680372:1$ 0 38372 1 2

# Output
1 1131 0 114476 1 4
5 367504 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575 0 386372 1 2

Me he encontrado con diferentes sugerencias para copiar una sola columna después de manipular o procesar el archivo completo/cadenapero necesitaría conservar las columnas restantes sin procesar. ¿Podría darnos ideas sobre cómo lograr esto con un solo comando ( awk/ cutone-liners) o con varios comandos?

Respuesta1

Puede splitincluir el segundo campo :y, si obtiene más de 2 piezas (es decir, la cantidad de elementos en la matriz z), conservar solo el primero:

awk '{n=split($2, z, ":");if (n > 2) $2=z[1]};1' infile

Si quisieras usarlo, subpodrías hacer algo como:

awk '{sub(/:.*:.*/,"",$2)};1' infile

es decir, intente reemplazar dos dos puntos (o más).

información relacionada