Você pode usar a variável interna RT
RT is set each time a record is read. It contains the input text that matched the text denoted by RS, the record separator. This variable is a gawk extension.
printf '%s\n' LF CRLF$'\r' |
gawk 'BEGIN { RS = "\r\n|\n" }
{ printf($0 RT) }'
Saída quando canalizado para sed -n l
- que mostra CR como \r
e end-of-line
como $
- que, para sed
, significa que o próximo caractere é \n
(ou end-of-input
.
LF$
CRLF\r$
No entanto, se você quiser alternar o terminador de CRLF para LF ou vice-versa, as duas ações são:
printf '%s\n' was-LF was-CRLF$'\r' |
gawk 'BEGIN { RS = "\r\n|\n" }
RT == "\r\n" { printf($0 "\n") }
RT == "\n" { printf($0 "\r\n") }'
Saída quando canalizado para sed -n l
was-LF\r$
was-CRLF$
Nota: Você precisará usar if
para os testes quando eles não forem as primeiras linhas do código (seção principal):
gawk 'BEGIN { RS = "\r\n|\n" }
{ # some processing code here (before the tests)
if( RT == "\r\n" ) { printf($0 "\n") }
if( RT == "\n") { printf($0 "\r\n") } }'