Unix Shell CRLF será reemplazado por espacio

Unix Shell CRLF será reemplazado por espacio

Estoy usando la siguiente entrada para Oracle SQL Loader. El archivo que descargué como CSV del Servicio ahora tiene un CRLF

Probé el

dos2unix 
tr '\n' ',' < input.txt > output.txt
awk '{printf "%s\r\n", $0}' file

pero no hubo suerte.

Data de muestra :

"ID","NAME","GROUP","Free Text [CR][LF]
[CR][LF]
[CR][LF]
[CR][LF]
"
"ID1","NAME1","GROUP1","Free Text1 [CR][LF]
"

Salida deseada :

"ID","NAME","GROUP","Free Text"
"ID1","NAME1","GROUP1","Free Text1"

Sugiera un código o comando que sea útil

gracias de antemano

Respuesta1

$ perl -pe 'while(m/\r$/) { $_ .= readline }; s/\r\n//g' rgram.txt
"ID","NAME","GROUP","Free Text"
"ID1","NAME1","GROUP1","Free Text1"

Esto une líneas sucesivas que terminan en CRLF ( \r$o \r\n) en una línea larga, luego elimina todos los pares CRLF de esa línea y la imprime.

La entrada modificada se imprime en la salida estándar, que se puede redirigir a otro archivo. O use la opción perlde -ipara modificar el archivo original en el lugar:

$ perl -i.bak -pe 'while(m/\r$/) { $_ .= readline }; s/\r\n//g' rgram.txt

Esto mantendrá el original como rgram.txt.bak.

No soy partidario de usar -i, prefiero redirigir la salida estándar a, por ejemplo, rgram.new. Escribir en stdout es más versátil (puede canalizarlo a otros programas, o usarlo en procesos o sustitución de comandos, etc.) y hay menos riesgo de cometer un error al destruir el archivo original.


rgram.txtes un archivo de texto que contiene los datos de muestra como se describe en la pregunta:

$ sed -n l rgram.txt 
"ID","NAME","GROUP","Free Text\r$
\r$
\r$
\r$
"$
"ID1","NAME1","GROUP1","Free Text1\r$
"$

Respuesta2

sed 's/"$//' rgram.csv | sed 's/$/"/' | sed '/^"$/d' > rgram.new.csv

Primero eliminé el último carácter " del archivo y luego lo volví a agregar y luego eliminé la línea que comenzaba con ".

Respuesta3

Veo que quieres eliminar las secuencias CRLF pero dejar el LF sin preceder al CR solo, entonces:

perl -pe 's/\r\n//' < input.txt > output.txt

o:

gawk -v RS='\r\n' -v ORS= 1 < input.txt > output.txt

información relacionada