Adicionando um número a uma variável já presente sed / grep / awk

0

Eu tenho isso no arquivo.txt

FORM: lookupfile
Version: 1
LookupFile:"$i"

Como posso encontrar isso no arquivo e adicionar uma variável b ao $i .

Então, exemplo

ENTRADA

FORM: lookupfile
Version: 1
LookupFile:4

Suponha que meu b = 300

OUTPUT

FORM: lookupfile
Version: 1
LookupFile:304

    
por SamFlynn 24.06.2015 / 11:48

4 respostas

1
awk -v b=$b 'BEGIN {FS=OFS=":"} /LookupFile/ {print $1,$2+300;next} {print}' file.txt

Aqui está outro, com sed :

num=$(sed -n '/LookupFile:.*/p' file.txt | cut -d':' -f2); substitute=$(expr 300 + $num ); sed "s/LookupFile:.*/LookupFile:$substitute/g" file.txt

Se você quiser fazer alterações no arquivo, use o -i flag com o último comando sed

    
por Sergiy Kolodyazhnyy 24.06.2015 / 12:10
3
awk  -v b=$b -F: '{ if ( $1 == "LookupFile" ) $0=$1":"($2+b); print $0 }' file.txt

Isso imprimirá toda a linha e mudará a linha apenas quando $ 1 for uma string "LookupFile". Delimitador é ":"

    
por 7171u 24.06.2015 / 12:04
1

Usando gawk

b=300; gawk -v "b=$b" '/^LookupFile/ {line=gensub (/(^LookupFile:.*)[0-9]+/,"\1",$0); number=gensub(/^LookupFile:([0-9]+)/,"\1",$0); printf "%s",line; printf "%s",number+b"\n"} !/^LookupFile/ {print}' foo

Exemplo

$ cat foo
FORM: lookupfile
Version: 1
LookupFile:4

$ b=300; gawk -v "b=$b" '/^LookupFile/ {line=gensub (/(^LookupFile:.*)[0-9]+/,"\1",$0); number=gensub(/^LookupFile:([0-9]+)/,"\1",$0); printf "%s",line; printf "%s",number+b"\n"} !/^LookupFile/ {print}' foo
FORM: lookupfile
Version: 1
LookupFile:304
    
por A.B. 24.06.2015 / 12:05
0

Usando o Perl:

perl -pe "s/^(LookupFile:)(.*)/\.($b+\)/e" file.txt
    
por kos 24.06.2015 / 13:03