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
/ cut
one-liners) o con varios comandos?
Respuesta1
Puede split
incluir 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, sub
podrías hacer algo como:
awk '{sub(/:.*:.*/,"",$2)};1' infile
es decir, intente reemplazar dos dos puntos (o más).