заменить последние "," в CSV с вкладкой? - PullRequest
0 голосов
/ 12 октября 2018

Как можно заменить LAST ',' в большой и широкой таблице CSV на вкладку в vi?Команда awk была бы такой же полезной, но я недостаточно хорошо знаю awk.(Я бы сделал это на PERL, но я не хочу писать сценарий).

Пример.Замените запятую перед последним значением на вкладку.Это легко сделать в начале строки, но не в конце.Любые идеи?

chr9,5971307,…,2,2,2,2,2,0,5881595,6007901,KIAA2026,20605
chr9,5971313,…,0,0,0,0,0,0,5881595,6007901,KIAA2026,20605
chr9,5971416,…,2,2,2,2,2,0,5881595,6007901,KIAA2026,20605

Примечание: количество значений CSV> 1000. Значения не являются фиксированными, как показано выше, поэтому я не могу полагаться на данные или фиксированный номер столбца.Это зависит от разделителей полей (,).

Спасибо за любую помощь, которую вы можете предоставить.Ура, Джо Уайт

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете сделать это с помощью команды substitute.

:%s/,\ze[^,]*$/\t

Часть \ze приведет к тому, что все после него (то есть [^,]*$) не будет заменено, но оно все равнодолжен соответствовать.Таким образом, это означает:

  • :%s/ Заменить на каждой строке ...
  • , запятую
  • \ze С последующим, (но не 'заменить эту часть)
  • [^,]* Любое количество символов, которые не являются запятыми.
  • $, а затем конец строки
  • / с
  • \t табуляцией.

Это фактически то же самое, что

:%s/,\([^,]*\)$/\t\1

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

:%norm $F,r<C-v><tab>

(Обратите внимание, что <C-v> означает ctrl-v и <tab> означает буквенный символ табуляции)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...