Substitua @@@ e NotApplicable string e redirecione a saída para outro arquivo? [duplicado]

0

Estou usando o IBM AIX que não tem muito suporte como sed -i e sed com \t não está funcionando no meu caso.

Eu gostaria de substituir replace NotApplicable string por single space ' ' e substituir @@@ multi-char-delimiter por tab delimiter , em uma ordem especificada usando um único comando, seja awk ou sed.

Eu tentei usar sed como seguindo, mas não funcionou. Não foi possível adicionar pesquisa e substituir por NotApplicable com um "espaço único no comando abaixo".

sed 's/@@@/\t/g' file.csv > file.xls

Dados da amostra.

cola@@@colb@@@colbc
test@@@test@@@test
test@@@NotApplicable@@@test
123@@@145@@@567
333@@@444@@@NotApplicable

cola    colb    colbc
test    test    test
test            test
123     145     567
333     444         
    
por mr_eclair 28.11.2018 / 02:44

2 respostas

1

Traduzindo a resposta de Gilles para esta situação, seria:

sed $'s/@@@/\t/g; s/NotApplicable/ /g' file.csv > file.xls

Isso usa aspas ANSI-C para permitir a interpretação de \t como uma TAB; tudo o mais dentro das aspas é o comando sed existente.

    
por 28.11.2018 / 02:58
1

Provavelmente há maneiras mais óbvias de fazer isso, mas uma maneira de gerar qualquer caractere em qualquer sistema unix é com tr (1):

tab='echo t | tr t '1''
sed "s/NotApplicable/ /g; s/@@@/$tab/g" file.csv > file.xls

Observe as cotas duplas ao redor do comando sed .

    
por 28.11.2018 / 10:12