Substituição de um número particular em arquivos unix

2

Eu quero fazer um comando que possa substituir um número em particular no sistema de arquivos Unix, por exemplo:

ZAR     ZEC      ZDA
-9         2      3
4          8      -9
5          6      7

Eu tenho ZAR , ZEC , ZDA como meu cabeçalho e -9 em ZDA deve ser substituído por +9 . Que comando devo escrever para que altere em particular esse número sem alterar outros valores como "-9" presentes no campo ZAR ?

    
por user3476203 01.09.2016 / 21:50

2 respostas

3

Para alterar qualquer ocorrência de -9 na terceira coluna do seu arquivo para +9 :

$ awk '$3==-9 {$3="+9"} 1' OFS='\t' file
ZAR     ZEC     ZDA
-9      2       3
4       8       +9
5       6       7

$3==-9 seleciona linhas para as quais a terceira coluna é -9 . Para essas linhas, a atribuição $3="+9" altera essa coluna para +9 . O 1 é a abreviação abreviada do awk para imprimir na linha. Por fim, OFS='\t' diz ao awk para imprimir a saída usando uma tabulação como separador de campo.

Alterando o arquivo no lugar

Usando o GNU awk (Linux):

awk -i inplace '$3==-9 {$3="+9"} 1' OFS='\t' file

Usando o awk do BSD / OSX:

awk '$3==-9 {$3="+9"} 1' OFS='\t' file >tmp && mv tmp file
    
por 01.09.2016 / 21:55
0
$ cat file
ZAR     ZEC      ZDA
-9         2      3
4          8      -9
5          6      7

Como a coluna ZDA é o último campo,

$ sed 's/-9$/+9/' file
ZAR     ZEC      ZDA
-9         2      3
4          8      +9
5          6      7

Para alterar o arquivo de entrada, use -i para a versão GNU (ou -i.bak no OSX / BSD)

sed -i 's/-9$/+9/' file
    
por 02.09.2016 / 15:17