Пробел замены с запятой в текстовом файле в Linux

Существуют ответы, но трудно быть общим, не зная детали проблемы.

я принимаю 32-разрядный Windows XP.

Стараются не требоваться 100 с МБ непрерывной памяти, если Вы будете неудачны, то несколько случайных dlls загрузят себя в точках inconventient через Ваше доступное адресное пространство, быстро сокращающее очень большие площади непрерывной памяти. В зависимости от того, в каких API Вы нуждаетесь, это может быть довольно трудно предотвратить. Может быть довольно удивительно, как просто выделение нескольких блоков 400 МБ памяти в дополнение к некоторому 'нормальному' использованию памяти может оставить Вас с нигде не выделить заключительный 'небольшой' блок 40 МБ.

, С другой стороны, действительно предварительно выделите разумные блоки размера за один раз. Из порядка приблизительно 10 МБ хороший размер блока компромисса. Если можно удаться разделить данные в этот вид блоков размера, Вы сможете заполнить адресное пространство обоснованно эффективно.

, Если Вы все еще собираетесь закончиться адресное пространство, Вы испытываете необходимость, чтобы смочь разбить на страницы блоки в и на основе своего рода алгоритма кэширования. Выбор правильных блоков к странице собирается зависеть очень от Вашей обработки algortihm и будет нуждаться в тщательном анализе.

Выбор, где разбить на страницы вещи к, является другим решением. Вы могли бы решить просто записать им во временные файлы. Вы могли также исследовать Работу с окнами Адреса Microsoft Extenstions API. В любом случае необходимо быть осторожными в проектировании приложений для чистки любых указателей, которые указывают на что-то, что собирается быть разбитым на страницы, иначе действительно плохие вещи (TM) произойдут.

Удачи!

56
задан Benjamin W. 20 March 2016 в 06:36
поделиться

6 ответов

tr ' ' ',' <input >output 

Заменяет каждый пробел запятой, при необходимости вы можете передать его с флагом -s (сжатие повторов), который заменяет каждую входную последовательность повторяющегося символа, указанного в SET1 ( пробел) с одним вхождением этого символа.

Использование повторений сжатия, используемых после замены табуляции:

tr -s '\t' <input | tr '\t' ',' >output 
79
ответ дан 26 November 2019 в 17:06
поделиться

Попробуйте что-нибудь вроде:

sed 's/[:space:]+/,/g' orig.txt > modified.txt

Символьный класс [: space:] будет соответствовать всем пробелам (пробелы, табуляции и т. Д.). Если вы просто хотите заменить один символ, например. просто пробел, используйте только его.

РЕДАКТИРОВАТЬ: На самом деле [: space:] включает возврат каретки, так что это может не сделать то, что вы хотите. Следующие символы заменят табуляции и пробелы.

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

как

sed 's/[\t ]+/,/g' orig.txt > modified.txt

Во всем этом вам нужно быть осторожным, чтобы элементы в вашем файле, разделенные пробелами, не содержали своих собственных пробелов, которые вы хотите сохранить, например. два слова.

27
ответ дан 26 November 2019 в 17:06
поделиться

без просмотра входного файла, только предположение

awk '{$1=$1}1' OFS=","

перенаправляет в другой файл и переименовывает его по мере необходимости

26
ответ дан 26 November 2019 в 17:06
поделиться

А что насчет чего-то вроде этого:

cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt

(Да, с некоторой бесполезной привязкой и конвейером; я полагаю, можно также использовать <для чтения из файла напрямую - сначала использовал cat для вывода содержимое файла, и только после этого я добавил sed в мою командную строку)

РЕДАКТИРОВАТЬ: как @ ghostdog74 указал в комментарии, определенно нет необходимости в cat / pipe; вы можете указать имя файла в sed:

sed -e 's/\s/,/g' texte.txt > texte-new.txt

Если "texte.txt" имеет следующий формат:

$ cat texte.txt
this is a text
in which I want to replace
spaces by commas

Вы получите "texte-new.txt", который будет выглядеть так:

$ cat texte-new.txt
this,is,a,text
in,which,I,want,to,replace
spaces,by,commas

I не пойдет просто заменить старый файл новым (можно сделать с помощью sed -i, если я правильно помню; и, как сказал @ ghostdog74, этот файл согласился бы создавать резервную копию на лету) : хранить может быть мудро, в качестве меры безопасности (даже если это означает необходимость переименовать его во что-то вроде "texte-backup.txt")

10
ответ дан 26 November 2019 в 17:06
поделиться

Эта команда должна работать:

sed "s/\s/,/g" < infile.txt > outfile.txt

Обратите внимание, что вы должны перенаправить вывод в новый файл. Входной файл не изменяется на месте.

7
ответ дан 26 November 2019 в 17:06
поделиться

sed может сделать это:

sed 's/[\t ]/,/g' input.file

Это отправит на консоль,

sed -i 's/[\t ]/,/g' input.file

отредактирует файл на месте

5
ответ дан 26 November 2019 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: