%3F%20.png)
Arquivo:
data
A B
C D
data
E F
G H
data
I J
K L
M N
Resultado desejado:
I J
K L
M N
Como dividir por “dados”? Tenho pesquisado no Google sobre como usar o awk, mas a maior parte do awk relativo é dividida na coluna.
Responder1
Para usar data
como separador de registros e imprimir o último registro:
$ awk -v RS=data 'END{print}' File
I J
K L
M N
Isso requer um awk, como GNU awk (gawk) ou mawk, que suporte valores de vários caracteres para RS
.
Responder2
$ awk '/^data/ { lines = ""; next } { lines = (lines == "" ? $0 : lines ORS $0) } END { print lines }' file
I J
K L
M N
Isso é usado awk
para obter o conteúdo da entrada após a última linha que começa com a string data
. Isso é feito salvando cada seção de linhas após essa linha na lines
variável. Cada vez que uma linha que começa com data
é encontrada, esta variável é esvaziada. O valor da variável é impresso ao chegar ao final da entrada.
Usando sed
:
$ sed -n 'H;${ x; s/.*\ndata\n//p; }' file
I J
K L
M N
Adicionamos todas as linhas ao espaço de espera. Ao encontrar a última linha, o espaço de espera é trocado no espaço padrão e tudo até a string data
(flanqueada por uma nova linha em cada lado) é removido antes que os bits restantes sejam impressos.
Usando ed
:
$ printf "?^data?ka\n1,'ad\n,p\nQ\n" | ed -s file
I J
K L
M N
ou,
ed -s file <<END_ED
?^data?ka
1,'ad
,p
Q
END_ED
Aqui, primeiro pesquisamos de trás para frente a última ocorrência da string data
no início de uma linha e rotulamos essa linha (o que chamamos de label a
). Em seguida, excluímos desde o início do buffer até a linha rotulada. O ,p
simplesmente exibe o conteúdo completo do buffer.
Com non-GNU ed
, o final Q
(sair sem salvar) provavelmente não é necessário.
Responder3
Para dividir registros em "dados" em vez de uma nova linha, defina a variável RS (separador de registros).
Você está interessado apenas no quarto registro (o primeiro registro está antes dos primeiros "dados"; está vazio), então imprima somente quando NR for 4.
cat file | awk 'BEGIN {RS="data\n"}; NR==4 {print}'
Responder4
Feito pelo método abaixo e funcionou bem Comando:
tac file.txt|sed -n '1,/data/p'| tac| sed -n '2,$p'
saída
I J
K L
M N