Жаль люди я плохо знаком с Linux, и в то время как я просмотрел список вопросов, на которые отвечают, я не знаю достаточно, чтобы распознать, ответили ли на мой вопрос. Или если я могу адаптировать одно из решения моей конкретной небольшой проблемы.
Я получаю текстовый файл данных от моего босса, который учился использовать компьютеры один путь; и он не изменится. Данные являются почти файлом CSV, кроме полей все разделяются пробелы скорее затем символ запятой или символ табуляции. И текстовые поля данных включают встроенные пробелы также.
Каждое поле является или числом или является числами и текстом, все поля имеют переменные длины, и ни один не смещается с одинарными или двойными кавычками. Числовые поля преобладают, и никакое текстовое поле не смежно ни с каким другим текстовым полем. Редко встроенное число в текстовом поле, которому предшествуют или сопровождаемый [пространство] символ.
К сожалению, не каждый [пространство] символ может просто быть заменен. Вместо этого, потому что, обычно, разрывы поля прибывают или в форме [пространства] [0-9] или в форме [0-9] [пространство], это - то, как я определяю, должен ли [пространство] символ быть преобразован во [вкладка] символ или нет. Если [пространство] символ - около цифры, чтобы быть преобразованным во [вкладка] символ.
Так использование Найти/Заменить функция в Блокноте для Windows, я ищу пространство цифры или разрядную пространством комбинацию, преобразовывая тот [пространство] символ к [вкладка] символ. Я должен сделать это десять раз [0-9] [пространство] и затем еще десять раз [пространство] [0-9]. Я ищу сценарий, чтобы сделать это автоматически.
Вот пример файла, который я получаю. Это содержит четыре поля, разделенные [пространством] символы (первая строка). Каждый после строки является одной записью, таким образом, вторая строка является первой записью. Account
2281
, Units
19
, Description
Toshiba PX-1982GRSUB
{, и наконец Delta
поле содержит 0
:
Account Units Description Delta
2281 19 Toshiba PX-1982GRSUB 0
9618 200 HP MX19942-228b -25
19246 4 CompuCom HD300g Hard Drive 4
Таким образом, то, что я ищу, является сценарием, который считает исходный файл, преобразует [пространство] символы, которые являются разделителями полей в символы и пишут все это в новый файл. И я хочу объяснение - таким образом, я не продолжаю задавать те же вопросы много раз.
Веб-поиск "пространства замены с запятой" был очень плодотворен, убрал не что работа для Вас сначала? Нашел бы много ответов как это:
tr ' ' ',' < input > output
или для вкладок:
tr '\t' ',' < input > output
и
sed 's/\s\+/,/g' input > output
\s
класс пространства (как [: пространство:]), и должен заменить любые выполнения (+
(оставленный) = один или несколько из предшествующего символа) пробелов или вкладок или новых строк также. Этот следующий только заменил бы каждый одиночный пробел или вкладку с единственной запятой (как выполнение обоих выше tr
):
sed 's/[ \t]/,/g' input > output
И -i
редактирует оперативный файл (непосредственно редактирует файл) в sed
Вот sed, который будет соответствовать числу пространства или пространству числа, и заменять их запятой, с помощью ИЛИ команда/символ |
оставленный как \|
ниже:
sed 's/ [0-9]\|[0-9] /,/g'
Итак, вам нужно заменить первые два и последний пробел в каждой строке запятой. Вы не можете просто заменить каждый пробел, потому что 3-е поле может содержать сами пробелы. Вы можете сделать это с помощью замены регулярных выражений. Вот сценарий / команда sed, которая работает:
sed -re 's/^(\S*) (\S*) (.*) (\S+)\s*$/\1,\2,\3,\4/' in.txt > out.csv
В приведенном выше примере это возвращает:
Account,Units,Description,Delta
2281,19,Toshiba PX-1982GRSUB,0
9618,200,HP MX19942-228b,-25
19246,4,CompuCom HD300g Hard Drive,4
Это все еще довольно хрупко с обработкой пустых полей и полностью разбивает, если столбцы кроме 3-го содержат пробелы. Очень легко ввести такие искаженные данные, если они отформатированы вручную, как это сделал ваш начальник. Вам следует предложить ему перейти на более надежный формат таблиц (например, правильный CSV & amp; Co.) и редактор (обычные инструменты для работы с электронными таблицами могут достаточно легко и гибко манипулировать CSV, например LibreOffice / OpenOffice Calc, Microsoft Excel и Google Docs).