Заменить пробел запятой в текстовом файле в Linux
Мне нужно отредактировать несколько текстовых файлов (вывод из sar
) и преобразовать их в файлы CSV.
Мне нужно изменить все пробелы (возможно, это вкладка между номерами в выходе) с помощью функций sed или awk (простая оболочка script в Linux).
Может ли кто-нибудь мне помочь? Каждая используемая мной команда вообще не меняла файл; Я попробовал gsub
.
Ответы
Ответ 1
tr ' ' ',' <input >output
Заменяет каждое пространство запятой, если вам нужно, вы можете сделать проход с флагом -s (сжать повторы), который заменяет каждую входную последовательность повторяющегося символа, который указан в SET1 (пустое пространство), с одним появление этого символа.
Использование повторов сжимания, используемых после замещающих вкладок:
tr -s '\t' <input | tr '\t' ',' >output
Ответ 2
Попробуйте что-то вроде:
sed 's/[:space:]+/,/g' orig.txt > modified.txt
Класс символов [: пробел:] будет соответствовать всем пробелам (пробелы, табы и т.д.). Если вы просто хотите заменить один символ, например. просто коснитесь, используйте это только.
EDIT: На самом деле [: пробел:] включает возврат каретки, поэтому это может не делать то, что вы хотите. Следующие слова заменяют вкладки и пробелы.
sed 's/[:blank:]+/,/g' orig.txt > modified.txt
как и
sed 's/[\t ]+/,/g' orig.txt > modified.txt
Во всем этом вам нужно быть осторожным, чтобы элементы в вашем файле, разделенные пробелами, не содержали их собственные пробелы, которые вы хотите сохранить, например. два слова.
Ответ 3
не глядя на ваш входной файл, только предположение
awk '{$1=$1}1' OFS=","
перенаправить на другой файл и переименовать при необходимости
Ответ 4
Что-то вроде этого:
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
Я бы не стал просто заменять старый файл на новый (может быть сделано с sed -i, если я правильно помню, и, как сказал @ghostdog74, этот согласился бы на создание резервной копии на лету): сохранение может быть разумным, в качестве меры безопасности (даже если это означает, что нужно переименовать его в нечто вроде "texte-backup.txt" )
Ответ 5
Эта команда должна работать:
sed "s/\s/,/g" < infile.txt > outfile.txt
Обратите внимание, что вам нужно перенаправить вывод в новый файл. Входной файл не изменяется на месте.
Ответ 6
sed может сделать это:
sed 's/[\t ]/,/g' input.file
Это отправит на консоль,
sed -i 's/[\t ]/,/g' input.file
отредактирует файл на месте
Ответ 7
Здесь Perl script, который будет редактировать файлы на месте:
perl -i.bak -lpe 's/\s+/,/g' files*
Последовательные пробелы преобразуются в одну запятую.
Каждый входной файл перемещается в .bak
Используются следующие параметры командной строки:
-
-i.bak
редактировать на месте и делать копии .bak
-
-p
перемещаться по каждой строке входного файла, автоматически печатать строку
-
-l
удаляет новые строки перед обработкой и добавляет их обратно
-
-e
выполнить код perl
Ответ 8
Если вы хотите заменить произвольную последовательность пустых символов (табуляция, пробел) одной запятой, используйте следующее:
sed 's/[\t ]+/,/g' input_file > output_file
или же
sed -r 's/[[:blank:]]+/,/g' input_file > output_file
Если некоторые из ваших строк ввода содержат начальные пробелы, которые являются избыточными и не нуждаются в преобразовании в запятые, то сначала вам нужно избавиться от них, а затем преобразовать оставшиеся пустые символы в запятые. Для такого случая используйте следующее:
sed 's/ +//' input_file | sed 's/[\t ]+/,/g' > output_file