Um caminho:
awk 'NR==2 || NR==3{a[i++]=$0;next}1;NR==5{for(j=0;j<2;j++){print a[j];}}' file
Eu tenho conteúdo de arquivo como:
this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line
awk 'NR==2 && NR==3 {f=$0;next} NR ==5 &&f{print;print f}' awk.write
O problema aqui é que em f
eu só posso salvar o valor de nr==3
Eu quero mover as linhas 2 e 3 depois da linha 5.
Tente:
$ awk '
FNR == 2 { l2 = $0; next } # Save 2nd line
FNR == 3 { l3 = $0; next } # Save 3rd line
FNR == 5 { # Print 5th line, follow 2nd, 3rd
print
print l2
print l3
next
}
1 # Print other lines
' <file
Observe que, se você perder a segunda e a terceira linha, o arquivo terá menos de cinco linhas.
awk 'NR == 2 || NR == 3 {l = l RS $0; next}
NR == 5 {$0 = $0 l}
{print}'
Você precisa de várias variáveis ou uma matriz. Com awk
:
awk 'NR==2||NR==3{a[i++]=$0;next} NR==5{print;for(c=0;c<i;c++){print a[c]}next}1' file
NR==2||NR==3
se for linha 2 ou linha 3
a[i++]=$0;next
preencha a matriz a
e continue. NR==5
se for linha 5
print
primeiro imprime a linha. for(c=0;c<i;c++){print a[c]}
percorre o array e imprime seu conteúdo. 1
é uma condição verdadeira para imprimir cada linha. Tags text-processing awk