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

3

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 um dois pontos, eu precisaria do conteúdo antes dos primeiros dois pontos. Eu 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

Eu encontrei diferentes sugestões para copiar uma única coluna depois de manipular ou processar o arquivo inteiro / string mas eu precisaria manter as colunas restantes não processadas. Você poderia, por favor, dar idéias sobre como conseguir isso em um único comando ( awk / cut one-liners) ou vários comandos.

    
por Prradep 20.05.2016 / 12:56

1 resposta

3

Você poderia split o segundo campo em : e se obtiver mais de 2 partes (ou seja, o número de elementos na matriz z ) manterá somente o primeiro:

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).

    
por 20.05.2016 / 13:48