Помещение новой строки, когда она соответствует третьему пространству

У меня есть данные, которые выглядят так:

8.620 -9.182 1.758 8.786 -8.249 -0.495 8.614 -9.652 -1.158 9.446 -9.278 0.350 11.450 -7.809 0.887 10.638 -9.000 2.070 11.179 -10.871 -1.200 7.583 -10.330 0.400 7.079 -9.330 -1.014 6.745 -11.702 0.004 11.610 -12.260 -1.101 12.381 -13.783 -

Я хочу сделать три столбца столбца, поэтому всякий раз, когда это соответствует третьему пространству, напечатайте новую строку. Есть ли какая-нибудь команда bash, которую я могу использовать, или как внутри скрипта perl я могу ее изменить. Это не файл, я разбил строки в соответствии с пространством, взял элемент [6,7,8] и просто подтолкнул эти элементы к массиву.

Это часть скрипта:

if ($file_each[$line]=~/^ATOM/) { $file_each[$line]=~s/^ATOM//; @os=split '\s+', $file_each[$line]; chomp @os[6,7,8]; push @coord, @os [6,7,8]; print "@coord\n"; }

Вот как выглядит результат:

8.620 -9.182 1.758 8.786 -8.249 -0.495 8.614 -9.652 -1.158
1
задан 8 January 2018 в 05:57

2 ответа

Если строка $line содержит ваши номера, попробуйте:

$line =~ s/(.*?\d +.*?\d .*?\d) +/$1\n/g;

Мы можем попробовать ее из файла с помощью

perl -pe 's/(.*?\d +.*?\d .*?\d) +/$1\n/g' ex
0
ответ дан 17 July 2018 в 23:38

Если строка $line содержит ваши номера, попробуйте:

$line =~ s/(.*?\d +.*?\d .*?\d) +/$1\n/g;

Мы можем попробовать ее из файла с помощью

perl -pe 's/(.*?\d +.*?\d .*?\d) +/$1\n/g' ex
0
ответ дан 24 July 2018 в 17:04

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

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