2014-05-23 11 views
9

Ho esportato i risultati in un file di testo da un programma in esecuzione su Windows 7 e copiato il file su Xubuntu 14.04. In un terminale, ho eseguito dos2unix file.txt, che mi dice converting file out_mapqtl.txt to Unix format. Tuttavia, quando guardo il file con less, continuo a vedere Windows end-of-line come^M, e wc -l mi restituisce "0".dos2unix non converte^M

Ho provato diverse cose descritte here, ma nessuna funziona. Ho quindi aperto il file in Vim e ho fatto :%s/\r/\r/g come spiegato there, che ha funzionato bene. Quindi qualche idea sul perché dos2unix non ha funzionato? Ci sarebbe un modo per evitare di aprire Vim ogni volta?

+0

Un po 'tardi qui ...Ma ho scritto un piccolo programma che rende la vita più facile di dos2unix quando non si è sicuri del formato di input, o quando i formati di input sono mescolati: https://github.com/mdolidon/endlines –

risposta

8

\r indica un ritorno a capo e in MAC viene utilizzato senza \n per indicare un'interruzione di riga. Sei sicuro che il file sia in formato DOS (\r\n) e non MAC (\r)?

Se VIM si trasforma in realtà rivela essere l'unica cosa che ti riparare i file, si può anche invocarlo come:

vim somefile.txt +"%s/\r/\r/g" +wq

Questo aprirà il file, eseguire l'operazione, salvarlo, quindi esci.

Puoi fornirci un esempio del file, in modo da poter esaminare ulteriormente?

+0

scusa per il ritardo della mia risposta. Il file è stato prodotto su Windows 7, quindi presumo sia in formato DOS. Non sono nemmeno sicuro che il programma funzioni su Mac. A proposito, il programma si chiama [MapQTL] (http://www.kyazma.nl/index.php/mc.MapQTL/). Ad ogni modo, il mio problema è ora risolto, grazie. – tflutre

+0

Grazie per averci fatto sapere che il tuo problema è stato risolto e accettare la mia soluzione come risposta. –

+0

ciao, cosa fa "% s/\ r/\ r/g"? sembra un'espressione sedata. sostituire '\ r' con "\ r"? – nathan

1

Prova questo:

tr -d '\r' < file 
0

Prova:

:%s/\r\(\n\)/\1/g 

o

:%s/^M//g 
4

So che avete ottenuto questo risolto, ma ho voluto aggiungere una nota di riferimento, in base su alcuni test che ho fatto.

Se less sta mostrando^M, allora come Sybren sospetto sia un finale in stile MAC (\ r), non DOS (\ r \ n). È possibile determinare che facilmente utilizzando cat:

$ cat nomefile -e

  • Unix terminazioni (\ n) mostrano come $
  • MAC terminazioni (\ r) mostrano come ^M (meno spettacoli questi)
  • terminazioni
  • DOS \ Windows (\ r \ n) visualizzare ^M $ (meno non sembra mostrare questi)

Usa dos2unix per sbarazzarsi del DOS (^ M $) terminazioni

Utilizzare mac2unix a sbarazzarsi del MAC (^ M) finali - dos2unix non saranno sbarazzarsi di questi.

Avevo un file in cui dovevo usare dos2unix e mac2unix per eliminare tutte le terminazioni non Unix.

+0

grazie per questa risposta, sono stato scappato in esecuzione dos2unix, non mi ero reso conto che il file stesse usando in qualche modo le vecchie terminazioni della linea mac. – Pellet

Problemi correlati