Substituir campos no arquivo inline

1

Eu tenho um arquivo (a.txt) com o seguinte conteúdo:

Redhat master 12345678 V1A 20.0/20.0.1
Windows slave 12345678 V1B 19.0/19.0.1

Eu quero alinhar com a palavra "mestre" e substituir o quarto e o quinto campo por um novo valor.

Por exemplo, um novo a.txt pode ser:

Redhat master 12345678 V1B 20.0/20.0.2
Windows slave 12345678 V1B 19.0/19.0.1

Aqui "V1A" é substituído por "V1B" e "20.0 / 20.0.1" por "20.0 / 20.0.2"

Alguém pode ajudar a conseguir isso?

Eu também quero passar novos valores como parâmetro de script:

Posso passar novos valores como um parâmetro para um script? Eu estava tentando abaixo do script:

O conteúdo do script (test.sh) é o seguinte:

#!/bin/bash

if [ "$2" == "" ]; then
    echo usage: $0 \<version\> \<revision\>
    exit -1
else
   version=$1
   revision=$2
fi
awk '/master/{$4="$1";$5="$2"}' a.txt >newa.txt

Quando eu corro:

#bash test.sh V1B 20.0/20.0.2

não funciona.

    
por ganesh 15.07.2015 / 12:39

2 respostas

2

com awk :

awk '/master/{$4="V1B";$5="20.0/20.0.2"};1' a.txt

Primeiro, procuramos por linhas com a palavra "master" com /master/ e, em seguida, substituímos o valor no campo 4 ( $4 ) e 5 ( $5 ). Final 1 é apenas para imprimir tudo.

Editar:

Para passar um novo valor como parâmetro, você precisa usar a opção -v em awk , por exemplo:

x="V1B"
y="20.0/20.0.2"
awk -v VAR1="$x" -v VAR2="$y" '/master/{$4=VAR1;$5=VAR2};1' a.txt

(embora tenha cuidado para não funcionar corretamente se essas variáveis contiverem barras invertidas).

    
por 15.07.2015 / 12:45
-1

na linha

 awk '/master/{$4="$1";$5="$2"}' a.txt >newa.txt

"$ 1" não tem valor passado pelo shell.

você deve escrever

awk '/master/{$4="'$1'";$5="'$2'"}' a.txt > newa.txt

para que $ 1 frm call shell seja colocado no arquivo awk.

    
por 15.07.2015 / 13:22