acrescenta uma palavra ao final de uma linha no arquivo txt

3

Eu tenho um arquivo que deve ter "OK" no final de uma determinada linha

a linha que deve ser modificada é a primeira linha que não termina com "OK"

Eu posso grep o arquivo para obter a linha a ser modificada usando o seguinte código

grep -vnm 1 OK '/content2'

eu preciso de ajuda para adicionar o padrão OK ao final desta linha

Exemplo:

se o conteúdo do arquivo tiver as seguintes linhas

aaaaaaaaaaaaaa OK
bbbbbbbbbbbbbb OK  
cccccccccccccc  
dddddddddddddd
eeeeeeeeeeeeee OK

eu preciso adicionar OK à linha que contém o cccccccccccc

    
por Fat Mind 03.09.2014 / 21:17

2 respostas

4

Você pode usar o seguinte programa awk :

awk -v s=" OK" '/OK$/ { print; } !/OK$/ { print $0 s; s=""; }'

Funciona assim:

/OK$/ { print; }

imprime qualquer linha que termine em OK , enquanto

!/OK$/ { print $0 s; s=""; }

imprime qualquer linha não que termina em OK com o valor da variável s anexada.

Variável s inicialmente é a string ' OK' . Ele muda para a string vazia após o primeiro encontro de uma linha que não termina em OK .

Atualizar

Ainda mais conciso:

awk -v s=" OK" '!/OK$/ { print $0 s; s=""; } /OK$/'

elimina a ação { print; } da condição /OK$/ , pois { print; } é a ação padrão.

Correção

Olhando a questão novamente, ela não diz que OK deve ser adicionado à primeira linha que não tenha OK , mas sim que a primeira linha não tenha um OK que siga uma linha que tem um OK . Portanto, devemos manter uma variável, c , que sinalize pelo menos uma linha OK , e uma variável d que sinaliza que estamos prontos:

awk ' /OK$/ { if (!d) c=1; } 
     !/OK$/ { if (c) d=1; } 
     c && d { s=" OK"; c=0; }
     { print $0 s; s=""; }'
    
por zwets 03.09.2014 / 22:55
-1
sed -ri 's/.*cccccccccccccc */cccccccccccccc OK/g' filename

onde filename é o nome do seu nome de arquivo de entrada.

    
por Harris 03.09.2014 / 21:39