Para inserir o conteúdo do arquivo t4 duas linhas depois da n
-th ocorrência de ^group-sorted NTTA$
no arquivo H0, tente:
awk -v n=2 'FNR==NR{t=t"\n"$0;next} /^group-sorted NTTA$/ && n==++cnt {x=NR+3} NR==x{print substr(t,2)} 1' t4 H0
Embora haja, sem dúvida, uma solução sed
para esse problema, awk
é uma opção mais natural aqui porque awk
entende aritmética. Isso, por exemplo, torna mais fácil programar awk
para fazer algo depois da n
-th ocorrência de algo em que n
é uma variável.
Como funciona
-
-v n=2
Isso define o valor de
n
. -
FNR==NR{t=t"\n"$0;next}
Ao ler o arquivo com o primeiro nome,
t4
, isso salva seu conteúdo na variávelt
. -
/^group-sorted NTTA$/ && n==++cnt {x=NR+3}
Ao ler o arquivo de segundo nome,
H0
, o número de ocorrências de^group-sorted NTTA$
é salvo na variávelcnt
. Secnt
for igual an
, então, atribuiremos a variávelx
ao valor do número da linha atual,NR
, mais 3. -
NR==x{print substr(t,2)}
Quando alcançamos o número de linha
x
, imprimimos o conteúdo da variávelt
. (O comandosubstr
remove um caractere de nova linha inicial supérfluo). -
1
Esta é a abreviação do awk para imprimir a linha de corrente.
Exemplo
Considere estes arquivos de entrada:
$ cat H0
blah, blah
group-sorted ZBTS
10.48.37.11 zinpl001z3a01 #"TRENDe
10.48.37.12 zinpl001z3a02 #"TRENDe
group-sorted NTTA
10.59.31.11 etrpl001z1a01 # "TRENDe
10.59.31.12 etrpl001z1a02 # "TRENDe
10.59.31.13 etrpl001z1a03 # "TRENDe
group-sorted NTTA
10.59.31.14 etrpl001z1a04 # "TRENDe
10.59.31.31 etrvl201a1001 # "TRENDe
10.59.31.32 etrvl201a1002 # "TRENDe
group-sorted NTTA
10.59.31.33 etrvl201a1003 # "TRENDe
10.59.31.150 etrvl201a1004 # "TRENDe
10.59.31.151 etrvl201a1005 # "TRENDe
E:
$ cat t4
line 1 of t4
line 2 of t4
A saída do nosso comando é:
$ awk -v n=2 'FNR==NR{t=t"\n"$0;next} /^group-sorted NTTA$/ && n==++cnt {x=NR+3} NR==x{print substr(t,2)} 1' t4 H0
blah, blah
group-sorted ZBTS
10.48.37.11 zinpl001z3a01 #"TRENDe
10.48.37.12 zinpl001z3a02 #"TRENDe
group-sorted NTTA
10.59.31.11 etrpl001z1a01 # "TRENDe
10.59.31.12 etrpl001z1a02 # "TRENDe
10.59.31.13 etrpl001z1a03 # "TRENDe
group-sorted NTTA
10.59.31.14 etrpl001z1a04 # "TRENDe
line 1 of t4
line 2 of t4
10.59.31.31 etrvl201a1001 # "TRENDe
10.59.31.32 etrvl201a1002 # "TRENDe
group-sorted NTTA
10.59.31.33 etrvl201a1003 # "TRENDe
10.59.31.150 etrvl201a1004 # "TRENDe
10.59.31.151 etrvl201a1005 # "TRENDe