Como localizar e substituir em um campo com base no valor do outro campo?

1

Eu tenho um arquivo como este.

IMS00|20140101|Unix|Jan14
IMS01|20140201|Unix|Feb14
IMS02|20140301|Unix|Mar14
IMS03|20140101|Unix|Jan14
IMS04|20140201|Unix|Feb14

Meus critérios são: se o valor da coluna 1 for IMS00 , o valor Jan14 da coluna 4 deverá ser substituído por Jan15 se o valor da coluna 1 for IMS01 , então o valor Feb14 da coluna 4 deverá ser substituído por Feb15 .

Como isso pode ser feito?

    
por M.Nehru 10.03.2015 / 17:23

3 respostas

2

Sua pergunta não é muito clara, por exemplo, no código que você escreve IMS00 e, mais tarde, se refere a ele como IMS.00 , com ponto. Também o número de colunas alteradas deve ser provavelmente 4 , não 3 . De qualquer forma, você provavelmente está procurando por

awk 'BEGIN{FS=OFS="|"}$1=="IMS00"{$4="Jan15"}$1=="IMS01"{$4="Feb15"}1' file

O bloco BEGIN é executado apenas uma vez no início e define o separador de campos FS e o separador de campos de saída OFS to | . Final 1 é apenas para imprimir tudo.

    
por 10.03.2015 / 17:32
0

Você pode fazer isso em Perl:

perl -pe 's/^(IMS00\|.*\|).*/$1Jan15/; s/^(IMS01\|.*\|).*/$1Feb15/;' file
    
por 10.03.2015 / 17:45
0

Aqui está uma solução Python:

#!/usr/bin/env python2
with open('file.txt') as f:
    for line in f:
        if line.startswith('IMS00'):
            print line.replace('Jan14', 'Jan15')
        elif line.startswith('IMS01'):
            print line.replace('Feb14', 'Feb15')

Este script irá ler cada linha do arquivo, então ele irá verificar se a linha começa com a string dada, se assim for, a parte desejada da linha será substituída pela string de substituição.

    
por 10.03.2015 / 18:23