숫자 데이터 파일에서 문자열 검색 및 바꾸기

숫자 데이터 파일에서 문자열 검색 및 바꾸기

편집해야 하는 데이터 파일이 있는데 그 형식은 다음과 같습니다.

-8.915602898150751e-05-7.050591991128022e-05-4.361255125222242e-052.309505585477205e-05-2.223040239244275e-051.088544645124330e-011.000000000000000e-15
7.528375184423486e-062.558479420795495e-052.537280868441473e-04-5.119189471594489e-056.455268837875294e-054.463628820267331e-011.000000000000000e-15

아시다시피 숫자에는 공백이 없으며 매우 특정한 방식으로 파일을 편집하고 싶습니다(시뮬레이션 작업을 위한 입력 파일로 사용하겠습니다). 파일이 다음과 같기를 원합니다.

 -1.0000000000000001e-001  0.0000000000000000e+000  0.0000000000000000e+000  4.3052618410549812e+009  0.0000000000000000e+000  0.0000000000000000e+000  2.4853118072193338e-015
  2.4106903033391415e-004  4.3586744793222273e-005  4.5561759893187341e-005 -4.0315591956328645e+007 -9.1758824977759705e+003 -2.5181138417225957e+004  2.4853118072193338e-015

이런 종류의 편집을 수행하기 위한 알고리즘을 개발하고 Notepad++에서 시도했지만 프로그램이 파일에 "보이지 않는" 문자를 추가하여 시뮬레이션에 적합하지 않게 되었습니다. 알고리즘은 다음과 같습니다.

  1. 문자열 "-1"이 발견되었습니다. 문자열 "-1"로 대체되었습니다. (대체에서 음수 기호 앞에 공백이 있습니다)

  2. 숫자 2-9에 대해 1단계를 반복합니다.

  3. 문자열 "1"이 발견되었습니다. 문자열 "1"로 대체되었습니다. (대체문의 1 앞에 공백이 2개 있습니다)

  4. 숫자 2-9에 대해 3단계를 반복합니다.

  5. 문자열 "-1"이 발견되었습니다. "-1"로 대체되었습니다. (검색 문자열에서 음수 기호와 1 사이에 공백 두 개를 찾으세요.)

  6. 숫자 2-9에 대해 5단계를 반복합니다.

저는 UNIX 쉘(저는 맥북 터미널을 사용하고 있습니다)에서 이 작업을 수행하고 싶습니다. 왜냐하면 이것이 보이지 않는 문자를 추가하거나 데이터를 손상시키지 않을 것이라고 믿기 때문입니다. 도움이 필요하세요?

미리 감사드립니다! ! ! ! !

답변1

sed -E '
   s/[0-9.+-]*e[-+]?[0-9]{2}/     &/g
   s/ *(.{22}[0-9])/\1/g' < input.txt > output.txt

이는 GNU 또는 FreeBSD(또는 OS/X와 같은 파생 버전) sed또는 sedUnix/POSIX 표준( 의 경우 -E)을 준수하는 다음 버전을 가정합니다.

관련 정보