Как разделить числа в виде строки (без пробела )на числа с пробелами в зависимости от количества цифр после запятой

Проблема исправлена: сделанная мной пользовательская обработка не обрабатывала команду так, как она отображалась:
На самом деле было обработано :groff -mom -Tpdf > file.pdf, без имени входного файла.

0
17.11.2021, 22:22
3 ответа
echo '5.6568542494924 15.5948709516943 15.594870951694315.594870951694321.466252583998021.466252583998021.466252583998027.4809024597083' |
    sed -nr '{s/ //g;: start;h;s/^([^.]*\..{13}).*$/\1/;p;g;s/^[^.]*\..{13}//; t dummy; : dummy; s/^(..*)$/\1/; t start; }'
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

Это решение обрабатывает пробелы во входных данных.

0
17.11.2021, 23:20

Использование стандартного (не -GNU )sed(, который не может вставить символ новой строки, используя \nс командой s):

$ sed -e 's/[0-9]\{13\}/&:/g' -e 'y/:/\n/' file
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

Это вставляет :после каждой серии из 13 цифр во входных данных, а затем заменяет все эти двоеточия символами новой строки с помощью команды y.

Или, используя буквальный перевод строки:

sed 's/[0-9]\{13\}/&\
/g' file

Или, если ваша оболочка понимает $'...'строки:

sed $'s/[0-9]\\{13\\}/&\\\n/g' file
1
18.11.2021, 08:25

Я думаю, вы могли бы просто grepэто:

$ grep -Eo '[0-9]+\.[0-9]{13}' < input.txt
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

Это работает, поскольку поиск следующего совпадения начинается с позиции, в которой закончилось предыдущее, а не перекрывающихся совпадений. Вы можете изменить это на [0-9]+\.[0-9]{0,13}, чтобы можно было использовать и более короткие числа, при условии, что они разделены нецифрами. Это также работает, потому что совпадение является жадным, поэтому, если есть 13 цифр, оно съест их все для первого числа, прежде чем перейти к следующему.

2
18.11.2021, 08:57

Теги

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