숫자 사이에 공백이 없는 시뮬레이션의 텍스트 파일이 있습니다. 아래에 예가 나와 있습니다. 소수점(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가 아닌) 사용( 개행을 삽입하는 명령을 사용할 수 없음 ):\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자리마다 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
이 솔루션은 입력의 공백을 처리합니다.