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.