Unix Shell CRLF будет заменен на пробел

Unix Shell CRLF будет заменен на пробел

Я использую следующие входные данные для Oracle SQL Loader. Файл, который я скачал как CSV из Service, теперь имеет CRLF

Я попробовал

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

но не повезло.

Образец данных :

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

Желаемый результат:

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

Пожалуйста, предложите код или команду, которые будут полезны

заранее спасибо

решение1

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

Это объединяет последовательные строки, заканчивающиеся на CRLF ( \r$или \r\n), в одну длинную строку, затем удаляет все пары CRLF из этой строки и печатает ее.

Измененный ввод выводится на stdout, который можно перенаправить в другой файл. Или используйте perlопцию , -iчтобы изменить исходный файл на месте:

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

Это позволит сохранить оригинал как rgram.txt.bak.

Я не фанат использования -i, я бы лучше просто перенаправил stdout, например, в rgram.new. Запись в stdout более универсальна (вы можете передать ее в другие программы или использовать ее в подстановке процессов или команд и т. д.), и меньше риск ошибки, которая испортит исходный файл.


rgram.txtтекстовый файл, содержащий образец данных, как описано в вопросе:

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

решение2

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

Сначала я удалил последний символ " из файла, а затем добавил его обратно, а затем удалил строку, начинающуюся с ".

решение3

Я вижу, что вы хотите удалить последовательности CRLF, но оставить только LF без предшествующей CR, поэтому:

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

или:

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

Связанный контент