Crie um registro duplicado com base em uma condição

0

Eu preciso escrever um script de shell onde eu tenho que criar um registro duplicado com base em uma condição e, em seguida, alterar o valor em uma coluna da nova linha que será criada.

Estou tentando criar um registro duplicado com base em uma condição e, em seguida, substituir na coluna na linha duplicada.

Exemplo:

Entrada será

Col1, Col2, Col3, Col4, COl5

1234,abcd,abcd,wxyz,USD
2345,abcd,abcd,wxyz,USD
3456,abcd,abcd,wxyz,EUR

Se a última coluna, ou seja; col5 é EUR, então uma linha a mais deve ser criada com alteração no valor da coluna.

O resultado deve ser

Col1, Col2, Col3, Col4, Col5

1234,abcd,abcd,wxyz,USD
2345,abcd,abcd,wxyz,USD
3456,abcd,abcd,wxyz,EUR
3456,abcd,abcd,wxyz,AUD
    
por Rakesh K 23.09.2013 / 15:18

3 respostas

3

Aqui estão algumas maneiras:

  • awk

    awk -F, '{print; if($NF=="EUR"){$NF="AUD"; OFS=",";print}}' file
    

    Isso é verificar o último campo ( $NR ) para verificar outro campo, alterar $NR para $N , onde N é o número que você deseja verificar (por exemplo, $3 para o quinto campo).

  • Perl

    perl -pe '$_.= "$1AUD\n" if /(.*)EUR$/' file 
    

    Este usa muita taquigrafia Perl que é mais difícil de explicar. Você pode escrever a mesma coisa assim:

    perl -e 'while(<>){if(/(.*)EUR$/){print "$_","$1AUD\n"} else {print "$_"}}' 
    

para cada linha do arquivo de entrada

    
por 23.09.2013 / 15:39
2

usando sed :

 sed -e 's|^\(.*\),EUR$|,EUR\r,AUD|'
    
por 23.09.2013 / 15:26
2

Uma alternativa Perl

perl -ne 'print;print if s/EUR\Z/AUD/' your_file

Se você quiser fazer as modificações no arquivo, basta adicionar a opção -i :

perl -ni -e 'print;print if s/EUR\Z/AUD/' your_file
    
por 23.09.2013 / 15:35