Tämä toimii siis olettaen, että CR-merkkejä on vain sellaisissa kohdissa, joissa kuuluu olla rivinvaihto. Jos niitä on myös muualla, olet syvässä suossa.
Eli kuten tuossa esimerkkirivillä on keskellä riviä ^M, niin olen suossa?
Kolme mahdollista tapausta:
1. CR-merkkejä on vain keskellä riviä, mahdollisesti satunnaisissa paikoissa. Oikeat rivinvaihdot on merkitty LF:llä tai CR+LF:llä.
Ratkaisu: poistetetaan kaikki CR-merkit. Tähän on esitetty sekä tr- että sed-komennot jo aiemmin.
2. CR-merkkejä on vain sellaisissa paikoissa, joissa kuuluu olla rivinvaihto, mutta LF saattaa puuttua.
Ratkaisu: dos2unix ja yksittäisten CR-merkkien muuntaminen LF-merkeiksi esim. tr-työkalulla, kuten esitin edellisessä viestissäni.
3. Yksittäisiä CR-merkkejä on sekä rivinvaihtojen kohdilla että keskellä riviä.
Mikään triviaali poisto tai muunnos ei pysty päättelemään, merkkaako CR rivinvaihtoa vai onko se turha. Tässä on todellinen ongelma, joka ei ehkä ole ratkaistavissa ilman heuristiikkaa tai koneoppimista. Jos tilanne on tämä, olisi todennäköisesti helpompaa lähteä aivan alusta selvittämään, mistä CR-merkit ovat dataan päätyneet.
Aiempi hexdump-listaus, jonka poistit (ja korvasit siistityllä esimerkillä jossa ei ole ainoatakaan CR-merkkiä), viittasi tapaukseen 2 tai 3. Siinä ei siis ollut CR:ää rivin keskellä vaan rivinvaihdon kohdalla:
etunimi;tero^Msukunimi;antero
Uudessa esimerkissä tuo CR on vaihtunut LF:ksi:
etunimi;tero
sukunimi;antero
Jos siis datassa esiintyy sekä tällaisia tapauksia että yksittäisiä CR-merkkejä keskellä riviä vaikkapa nimen sisällä, olet pulassa.