Я пытаюсь разделить координаты GPS на два отдельных поля в файле CSV. Координаты в настоящее время объединены. Вот несколько примеров:
+40.71427-074.00597/
-42+174/
+33.20984-087.56917/
+39.76-098.5/
+39.76-098.5/
+42.27756-083.74088/
Я думал разделить это, используя:
sed -r 's/-/,-/g'
но это будет работать только для строк, содержащих «-», некоторые из них начинают строку с - или имеют + в середине. Знаки +/- важно сохранить, поскольку они определяют направление, поэтому я не могу позволить себе их потерять.
Любые советы или предложения будут очень признательны, и спасибо, что нашли время!
Помогает ли мое решение? Пожалуйста, дайте знать, если есть что-то еще, что неясно об этом.
Вы можете использовать
sed -E 's/(.+)([-+])/\1,\2/' file > newfile # POSIX ERE syntax
sed 's/\(.*\)\([-+]\)/\1,\2/' file > newfile # POSIX BRE syntax
См. онлайн sed
демо
Шаблон (.+)([-+])
соответствует и захватывает в группу 1 любой один или несколько символов, а затем захватывает -
или +
в группе 2, а затем замена \1,\2
вставляет запятую между группами.
Вы можете сделать шаблон немного более эффективным с помощью выражения с отрицательными скобками:
's/([^-+]+)([-+])/\1,\2/' # POSIX ERE
's/\([^-+]*\)\([-+]\)/\1,\2/' # POSIX BRE
где [^-+]+
соответствует 1 или более символам, кроме -
и +
.
С любым седом:
$ sed 's:\(.*\)\([+-].*\)/:\1,\2:' file
+40.71427,-074.00597
-42,+174
+33.20984,-087.56917
+39.76,-098.5
+39.76,-098.5
+42.27756,-083.74088
Это может сработать для вас (GNU sed):
sed 's/[+-]/,&/2' file
Это заменяет второе вхождение +
или -
на ,+
или ,-
.
Попробуйте
sed -E 's/(.+)([-+])/\1,\2/'