Eu manipularia o conteúdo da segunda coluna com base no número de dois pontos que ela contém. Se o segundo campo contiver mais de dois pontos, eu exigiria o conteúdo antes do primeiro dois pontos, caso contrário, exigiria o valor inteiro.
#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
Encontrei diferentes sugestões para copiar uma única coluna após manipular ou processar o arquivo inteiro/cordamas eu precisaria manter as colunas restantes não processadas. Você poderia dar ideias sobre como conseguir isso em um único comando ( awk
/ cut
one-liners) ou em vários comandos.
Responder1
Você poderia split
ativar o 2º campo :
e se obtiver mais de 2 peças (ou seja, o número de elementos no array z
) manter apenas o 1º:
awk '{n=split($2, z, ":");if (n > 2) $2=z[1]};1' infile
Se você quisesse usar, sub
poderia fazer algo como:
awk '{sub(/:.*:.*/,"",$2)};1' infile
isto é, tente substituir dois dois pontos (ou mais).