Modifique os valores em uma coluna com base no número de dois pontos que ela contém

Modifique os valores em uma coluna com base no número de dois pontos que ela contém

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/ cutone-liners) ou em vários comandos.

Responder1

Você poderia splitativar 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, subpoderia fazer algo como:

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

isto é, tente substituir dois dois pontos (ou mais).

informação relacionada