редактировать: теперь, когда я получил ответы, я пометил один из них @KamilMaciorowski, который лучше подходит для заголовка в качестве ответа, но этот ответ @oliv фактически лучше соответствовал моей реальной потребности в моей основной цели. (Для обработки csv-файла с разрывами последовательно в awk.)
Так что в случае, если вы искали в подобных обстоятельствах, я рекомендую сначала проверить это!
Пожалуйста, помогите мне подготовить несколько тысяч файлов CSV, готовых к обработке в awk
! Некоторые поля имеют разрывы строк внутри поля, и поэтому awk
обрабатывает их как несколько записей.
Однако эти проблемные разрывы строк происходят только тогда, когда вставлено ^ M, поэтому мне просто нужно удалить ^ M и разрыв строки в целом из всех них.
* Эти ^M
действительно являются символом разрыва строки, а не буквальной кареткой и буквой M. Этот файл сгенерирован для синтаксического анализа и обработки .net, но я не занимался разработкой приложений ни на одной из сторон создания / чтения файлов, поэтому не знаю, насколько успешно он был проанализирован. Он используется исключительно для полей в определенных столбцах с многострочными строками (комментарии).
Итак, как вы делаете это (CSV с 1 заголовком и 2 записями. В некоторых полях есть разрывы строк, перед которыми стоит ^ M):
"header_1", "header_2", "header_3"
"1-1", "1-2", "1-3"
"2-1", "2-2_a^M
2-2_b^M
2-2_c", "2-3"
как это? (CSV с 1 заголовком и 2 записями без разрывов строк в каждом из них.):
"header_1", "header_2", "header_3"
"1-1", "1-2", "1-3"
"2-1", "2-2_a2-2_b2-2_c", "2-3"
Я попытался удалить их с помощью sed
но я слышал, что нет способа обработать, и я не совсем понял причину.
for file in *.csv; do
sed -e "s/^M//" $file > sedded/$file;
done
Во всяком случае, я получаю это:
"header_1", "header_2", "header_3"
"1-1", "1-2", "1-3"
"2-1", "2-2_a
2-2_b
2-2_c", "2-3"
Я пытался найти что-то вроде "s/^M\n/"
, и это не сработало, как я подозревал. Должен ли я использовать совершенно другой инструмент, как vim
? Пока он работает одновременно с тысячами файлов (каждый из которых содержит ~ 500 строк, и мне все равно, сколько времени требуется на обработку), я в порядке с любым разрешением. Просто подумал, что sed
- это путь. (Я могу использовать команду DOS / PowerShell, если это проще или проще!)