Você de alguma forma conseguiu finais de linha no estilo do Windows, ou seja, CRLF
\x0D\xOA
\r\n
...
printf 'xyz\r\n' >file; cat file | awk '{print "a" $1 "b"}'
saídas de bxyz
cat file | sed -n l
outputs xyz\r$
- O $
inidata o final da linha
Você pode filtrar qualquer \r
s extrangeiro de um par \r\n
com awk
cat file | awk -vRS='\r?\n' 1 | sed -n l
Saídas xyz$
Para corrigir o problema:
cat file | awk -vRS='\r?\n' 1 > file.fixed
Por que esse comportamento?
Quando a saída cat file
é exibida em um terminal, o \r
(Retorno de carro) faz o que é (foi) destinado a fazer, ou seja. Retorne o carro totalmente para a esquerda. Para o terminal, isso significa que o ponto de inserção de texto é movido para a borda esquerda da tela - a terminologia e conceito de \r
derrives da era da máquina de escrever manual, quando o Transporte era Retornado para a margem esquerda (por uma alavanca manual), e uma vez na margem esquerda, o rolo avançaria o papel para baixo em 1 linha, ou seja, Fed o papel 1 Linha .
No terminal, porque você tem b
após \r
, o b
sobrescreve o a
colocado anteriormente na coluna 1.