script bash
Eu li que a resposta original não é exatamente o que você está procurando. Por favor, veja o seguinte roteiro. Isso só funciona quando você está ciente da quantidade de elementos do arquivo de entrada de antemão:
#!/bin/bash
infile=/home/wokie/duck.txt
outfile=/home/wokie/duck2.txt
# Define the amount of elements/columns in a row
maxelem=28
# Read the file, strip all newline characters and create one big variable
inputOneline=$(cat $infile | dos2unix | tr -d '\n')
count=0
# Read through the variable and split elements
for element in ${inputOneline//|/ }
do
if [ $count -lt $maxelem ]
then
# Write element to outfile while suppresing newline (-n)
echo -n "$element|" >> $outfile
count=$[$count +1]
else
# Write newline to outfile when maximum elements is reached
echo >> $outfile
count=0
fi
done
A ideia é tirar todas as novas linhas, depois disso um novo arquivo é colocado junto com as novas linhas nos lugares certos.
dos2unix
O script faz uso de uma ótima ferramenta chamada dos2unix. Ao executar o dos2unix apenas com o nome do arquivo como parâmetro, ele converterá automaticamente o arquivo de entrada (Windows) para o formato unix.
Se você iniciar a ferramenta com o parâmetro -id, o número de ocorrências de CRLF será contado, por exemplo:
[test@testsystem ~]$ dos2unix -id /home/wokie/test2.txt
5 /home/wokie/test2.txt
No arquivo de exemplo, existem 5 ocorrências.
Você pode encontrar a ferramenta dos2unix aqui:
link .
A maioria das distros fornece o dos2unix como padrão ou oferece a possibilidade de instalação usando o apt-get ou o dnf.