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 perl
de -i
para 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.txt
es 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