Duplicação de cada linha enquanto altera algum valor dentro de cada cópia de uma linha de maneira diferente no linux

1

Eu gostaria de ter cada linha em um arquivo repetido um número de vezes enquanto na primeira cópia da linha qualquer valor de 3 seria alterado em 2 e qualquer valor de 4 seria alterado em 1 e na segunda cópia de cada linha qualquer valor de 3 ser alterado para 1 e qualquer valor de 4 ser alterado para 2. Eu sei para duplicação Eu posso usar o comando awk:

awk '{for(i=0;i<1;i++)print}' input > output

Mas eu não sei como alterar os valores da maneira que expliquei

por exemplo. tem cada linha repetida 2 vezes:

1 000003444
2 334566875
3 000233300
4 222111000

torna-se:

1 000002111
1 000001222
2 221566875
2 112566875
3 000222200
3 000211100
4 222111000
4 222111000

Poderia algum corpo me guiar por favor?

    
por zara 30.09.2015 / 18:09

2 respostas

1

com awk :

$ awk '
  { tmp = $2; gsub("3", "2", $2); gsub("4", "1", $2); print}
  { $2 = tmp; gsub("3", "1", $2); gsub("4", "2", $2); print}
' <file
    
por 30.09.2015 / 18:19
0

Um caminho Perl:

$ perl -lane '$i=$F[1]; $F[1]=~s/3/2/g; $F[1]=~s/4/1/g; 
              $i=~s/3/1/g; $i=~s/4/2/g; print "$F[0] $F[1]\n$F[0] $i"' file 
1 000002111
1 000001222
2 221566875
2 112566875
3 000222200
3 000211100
4 222111000
4 222111000

Primeiro, salvamos a linha atual como $i , depois fazemos as substituições necessárias na linha atual, depois em $i e finalmente imprimimos a linha atual ( $_ ) e $i .

    
por 30.09.2015 / 18:17