Eu tenho um arquivo onde cada linha contém uma palavra-chave ( HELLO
) e um ou mais campos numéricos designados A1
, A2
, etc. O valor no campo numérico é colocado entre colchetes após o nome do campo e é opcional; se não estiver presente, o padrão é 0 . Cada campo pode conter vários números separados por :
; Eu só me importo com o primeiro. Eu preciso substituir a palavra-chave ( HELLO
) por 'A1 [X-Y + 1]. Aqui está um exemplo rápido:
case1: my test is (HELLO) with some numbers (A1, A2, A3, A4)
case2: my test is (HELLO) with some numbers (A1[X:Y], A2, A3, A4)
case3: replaceit(something(HELLO)) sometext (single_bit_here, somedatahere[4], something, something,something,something) ;
No primeiro, o campo A1
não recebe um valor, então 0 é assumido. 0 + 1 = 1 , então a saída é 1 .
No segundo caso, A1
tem um intervalo X: Y , então o resultado é X-Y + 1 . Vamos ter X = 10 e Y = 3 . Então, " HELLO " será 10-3 + 1 = 8 .
Saída:
case1: my test is (1) with some numbers (A1, A2, A3, A4)
case2: my test is (X-Y+1) with some numbers (A1[X:Y], A2, A3, A4)
case3: replaceit(something(1)) sometext (single_bit_here, somedatahere[4], something, something,something,something) ;
O código foi modificado um pouco e funcionou para todas as situações.
awk 'BEGIN {FS="[[\]]"}
{
nFields=split($2,a,":")
if(nFields ==2) n=1+a[1]-a[2]
else n=1
gsub("data_width", n) } 1' <datain.txt
o seguinte na pergunta: Eu preciso fazer a mesma substituição "inline" para todos os arquivos no mesmo diretório, por isso não preciso salvar os arquivos. Gostaria de usar o script perl
sugerido abaixo.