Substituindo texto em posição específica de outro arquivo

1

Eu preciso substituir o texto de File2.txt para File1.txt entre a 5ª e a 8ª posição. Supõe-se que seja qualquer personagem entre a 5ª e a 8ª posição, eu só preciso substituir com novos personagens na posição mencionada e o personagem da posição restante deve ser o mesmo que é.

File1.txt:

abcd9876efghijklmno
abcd9676efghijklmno
abcd9886efghijklmno
abcd9976efghijklmno

File2.txt:

1234
4321
6543
5678

Resultado esperado:

abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno

Comando que experimentei

sed '/substr($0,5,4)/r File2.txt' File1.txt >file_new.txt
    
por Prakash Balusamy 17.07.2017 / 10:11

2 respostas

0

Provavelmente mais fácil de usar a combinação de paste+cut

$ paste -d'
$ awk 'NR==FNR{a[FNR]=$0; next} {print substr($0,1,4) a[FNR] substr($0,9)}' File2.txt File1.txt
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno
' <(cut -c1-4 File1.txt) File2.txt <(cut -c9- File1.txt) abcd1234efghijklmno abcd4321efghijklmno abcd6543efghijklmno abcd5678efghijklmno


Outra maneira é o processamento de dois arquivos idiomáticos usando NR==FNR{a[FNR]=$0; next}

$ paste -d'
$ awk 'NR==FNR{a[FNR]=$0; next} {print substr($0,1,4) a[FNR] substr($0,9)}' File2.txt File1.txt
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno
' <(cut -c1-4 File1.txt) File2.txt <(cut -c9- File1.txt) abcd1234efghijklmno abcd4321efghijklmno abcd6543efghijklmno abcd5678efghijklmno
  • File2.txt salva todas as linhas de a na matriz print substr($0,1,4) a[FNR] substr($0,9) com o número da linha como chave
  • substr use File2.txt para extrair caracteres necessários e inserir as linhas de %code% entre
por 17.07.2017 / 14:37
0

Isso parece um pouco bizarro, mas:

dd if=file1 bs=1 count=4 > file3
dd if=file2 bs=1 count=4 >> file3
dd if=file1 bs=1 skip=8 >> file3  

Você não mencionou a cópia de nenhuma nova linha no arquivo2 e parece que você não a quis (se houver).

    
por 17.07.2017 / 11:22