Como posso encontrar e substituir apenas em um intervalo de colunas?

1

Eu tenho um arquivo de texto com 9267 linhas. Eu quero encontrar "A" com 5 espaços depois e substituí-lo por "A" com 5 espaços antes e depois em todas as linhas, mas apenas entre as colunas 67 e 88. Texto fora dessas colunas precisa ser excluído. Espero que sed e / ou awk possam ajudar aqui, embora eu não saiba como usá-los muito bem.

Detalhes: estou convertendo um PDF de 128 páginas em uma planilha. Eu usei PDFedit para salvar o PDF como um arquivo de texto. Estou planejando usar o LibreOffice para inserir uma "Folha do Arquivo". Isso está sendo difícil, porque, embora as colunas no PDF estejam bem alinhadas, as colunas do tipo planilha não estão na mesma coluna do tipo de arquivo de texto em todo o arquivo de texto. Cada 50 linhas ou mais é análogo a uma página PDF diferente, e é aí que uma coluna do tipo planilha pode mover algumas colunas do tipo de arquivo de texto para a esquerda ou para a direita. Em outras palavras, a coluna do tipo planilha para "Prateleira" pode iniciar na coluna 70 do tipo de arquivo de texto em uma parte do arquivo, mas iniciar na coluna 76 do tipo de arquivo de texto em outra parte. Isso faz com que as colunas do tipo planilha se sobreponham quando eu tento fazer uma inserção de "Largura Fixa" no LibreOffice. Eu quero fazer as colunas se espalharem mais adicionando espaços via find e replace, então eu posso dizer ao LibreOffice onde definir as colunas. Se eu encontrar e substituir o arquivo inteiro, acabo colocando espaços onde não os quero.

Veja um exemplo bastante preciso:

Item Code             Active Description                                Store Room      Row      Shelf     Bin  On Hand   
 38NUTZSL                Y      3/8"-16 HEX ZINC NUT                     B            03           C         2         0  
 WELD-AL                 Y      WELD, ALUM. ROD, STICK OR SPOOL          A            01             B       2         68.25  
 08300                   Y      WASHER, 7/8 CASE HARDENED 29/32 ID,1 3/4 OD  A            01        C            5         0
    
por aswine 24.07.2015 / 17:46

1 resposta

3

A melhor maneira de alterar o separador de colunas e usar o comando column :

sed 's/   */;/g' file | column -ts';'

que produzem:

Item Code  Active  Description                                  Store Room  Row  Shelf  Bin  On Hand
 38NUTZSL  Y       3/8"-16 HEX ZINC NUT                         B           03   C      2    0
 WELD-AL   Y       WELD, ALUM. ROD, STICK OR SPOOL              A           01   B      2    68.25
 08300     Y       WASHER, 7/8 CASE HARDENED 29/32 ID,1 3/4 OD  A           01   C      5    0
    
por 24.07.2015 / 19:58