공백 없이 문자열로 형식화된 숫자를 소수점 이하 자릿수를 기준으로 공백이 있는 숫자로 구분하는 방법

공백 없이 문자열로 형식화된 숫자를 소수점 이하 자릿수를 기준으로 공백이 있는 숫자로 구분하는 방법

숫자 사이에 공백이 없는 시뮬레이션의 텍스트 파일이 있습니다. 아래에 예가 나와 있습니다. 소수점(13)을 기준으로 숫자를 구분하고 싶습니다.

5.656854249492415.594870951694315.594870951694315.594870951694321.466252583998021.466252583998021.466252583998027.4809024597083   

나는 다음과 같은 출력을 원합니다 :

5.6568542494924   
15.5948709516943  
15.5948709516943  
15.5948709516943  
21.4662525839980  
21.4662525839980  
21.4662525839980  
27.4809024597083

아래 sed 명령을 사용해 보았지만 작동하지 않습니다.

sed -i 's/\(.\{14\}\)/\1 /g' input.txt

참고용으로 스크린샷을 첨부했습니다.여기에 이미지 설명을 입력하세요.

도움이 되는 조언을 주시면 감사하겠습니다.
감사해요

답변1

나는 당신이 이것을 할 수 있다고 생각합니다 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}숫자가 아닌 숫자로 구분되는 한 더 짧은 숫자를 허용 하도록 이를 변경할 수 있습니다 . 이 역시 일치 항목이 그리디(greedy)이기 때문에 작동하므로 숫자가 13개이면 다음 숫자로 넘어가기 전에 첫 번째 숫자의 모든 숫자를 먹어치웁니다.

답변2

다음을 사용할 수 있습니다 sed(점 뒤 13자).

# with new lines as in the output shown in the question
$ sed 's/\.\([^.]\{13\}\)/&\n/g' file
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

또는 더 간결한 GNU sed:

$ sed -E 's/\.[^.]{13}/&\n/g'

답변3

sed표준(GNU가 아닌) 사용( 개행을 삽입하는 명령을 사용할 수 없음 ):\ns

$ 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자리마다 1을 삽입한 다음 이 y명령을 사용하여 모든 콜론을 개행 문자로 바꿉니다.

또는 리터럴 줄바꿈을 사용하세요.

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

또는 쉘이 $'...'문자열을 이해하는 경우:

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

답변4

echo '5.6568542494924 15.5948709516943 15.594870951694315.594870951694321.466252583998021.466252583998021.466252583998027.4809024597083' |
    awk -F . '{ printf "%d.",$1; for(i=2;i<NF;i++) { frac=substr($i,1,13); intg=substr($i,14); printf "%s\n%d.",frac,intg; } print $NF;}'
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

이 솔루션은 입력의 공백을 처리합니다.

관련 정보