преобразуйте txt файл в csv, разделенный с вкладками

Жаль люди я плохо знаком с 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

Таким образом, то, что я ищу, является сценарием, который считает исходный файл, преобразует [пространство] символы, которые являются разделителями полей в символы и пишут все это в новый файл. И я хочу объяснение - таким образом, я не продолжаю задавать те же вопросы много раз.

1
задан 25 January 2016 в 15:14

2 ответа

Веб-поиск "пространства замены с запятой" был очень плодотворен, убрал не что работа для Вас сначала? Нашел бы много ответов как это:

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'
1
ответ дан 7 December 2019 в 13:49

Итак, вам нужно заменить первые два и последний пробел в каждой строке запятой. Вы не можете просто заменить каждый пробел, потому что 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).

1
ответ дан 7 December 2019 в 13:49

Другие вопросы по тегам:

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