2017-02-15 25 views
-2

У меня есть testfile.txt, как показано нижекак сделать данные в файле inorder?

/path/  345 firstline 
/path2/  346  second line 
/path3/ 347 third line having spaces 
/path4/ 3456 fourthline 

Теперь я хочу, чтобы это сделать, как показано ниже

/path/,345,firstline 
/path2/,346,second line 
/path3/,347,third line having spaces 
/path4/,3456,fourthline 

Согласно вышеуказанной продукции, данные должны быть сформированы с 3 столбцами и все столбцы разделены commas.There может быть один или несколько пробелов между колонками во входном file.Example,

/путь/ и

также могут быть разделены на 2 вкладки. Третий столбец содержит пробелы как есть.

Может ли кто-нибудь помочь мне в этом?

ответ

0

Вы можете использовать команду sed для достижения этой цели:

Я попробовал это, и это работает для меня:

sed 's/[ \t]\+/,/' testfile.txt | sed 's/[ \t]\+/,/' 

Он заменяет только первые и вторые экземпляры пробелов или табуляций в файле.


Обновление

sed (поток редактор) использует команды для выполнения редактирования. Первый параметр 's/[ \t]\+/,/' - это команда, которая используется для замены одного выражения на другое. Расщепление эту команду дальше:

Синтаксис: s/выражение1/выражения2/

s - substitute 
/- expression separator 
[ \t]\+ - (expression1) this is the expression to find and replace (This regular expression matches one or more space or tab characters) 
, - (expression2) this is what you want to replace the first expression with 

Когда выше команда выполняется на каждой строке первый экземпляр вашего выражения заменяется. Поскольку вам нужен второй разделитель, который также должен быть заменен, я передал результат первой команды sed другой аналогичной команде. Это заменило второй разделитель на ,.


Надеюсь, это поможет!

+1

Спасибо, он работает как ожидалось. –

+0

Можете ли вы также разработать команду, как она работает? –

0
tr -s ' ' <data |sed -e 's/\s/,/' -e 's/\s/,/' 
/path/,345,firstline 
/path2/,346,second line 
/path3/,347,third line having spaces 
/path4/,3456,fourthline 

Не лучший способ для этого, но он будет генерировать желаемый результат.