마침표를 쉼표로 바꾸기

마침표를 쉼표로 바꾸기

아래 값의 경우 아래 파일의 두 번째와 네 번째 "."를 ","로 바꿔야 합니다.

입력하다

1.351364711.103.7319660.2010-01-01 00:00:00
1.345529841.103.7372875.2010-01-01 00:00:49
1.342955629.103.7455272.2010-01-01 00:01:42
1.339694956.103.7520503.2010-01-01 00:02:28

원하는 중간 출력

    1.351364711,103.7319660,2010-01-01 00:00:00
    1.345529841,103.7372875,2010-01-01 00:00:49
    1.342955629,103.7455272,2010-01-01 00:01:42
    1.339694956,103.7520503,2010-01-01 00:02:28

나는 awk gsub(/./,",")이것이 모든 것을 쉼표로 대체한다는 것을 알고 있습니다. 하지만 ","로 열을 구분하면 됩니다. 그 후에는 세 번째 열도 먼저 전환하고 싶습니다.

원하는 최종 출력

2010-01-01 00:00:00,1.351364711,103.7319660
2010-01-01 00:00:49,1.345529841,103.7372875
2010-01-01 00:01:42,1.342955629,103.7455272
2010-01-01 00:02:28,1.339694956,103.7520503

답변1

bash-4.1$ cat file
1.351364711.103.7319660.2010-01-01 00:00:00
1.345529841.103.7372875.2010-01-01 00:00:49
1.342955629.103.7455272.2010-01-01 00:01:42
1.339694956.103.7520503.2010-01-01 00:02:28

bash-4.1$ awk -F. '{print $NF,$1"."$2,$3"."$4}' OFS=, file
2010-01-01 00:00:00,1.351364711,103.7319660
2010-01-01 00:00:49,1.345529841,103.7372875
2010-01-01 00:01:42,1.342955629,103.7455272
2010-01-01 00:02:28,1.339694956,103.7520503

답변2

사용 sed:

$ sed 's/\./,/4; s/\./,/2' file
1.351364711,103.7319660,2010-01-01 00:00:00
1.345529841,103.7372875,2010-01-01 00:00:49
1.342955629,103.7455272,2010-01-01 00:01:42
1.339694956,103.7520503,2010-01-01 00:02:28

먼저 네 번째 점을 쉼표로 바꾼 다음 두 번째 점을 바꾸세요.

역순으로 대체를 수행할 수도 있지만 두 번째 점을 바꾸면 선에서 점이 제거되므로 원래 네 번째 점이 세 번째 점이 됩니다.

$ sed 's/\./,/2; s/\./,/3' file
1.351364711,103.7319660,2010-01-01 00:00:00
1.345529841,103.7372875,2010-01-01 00:00:49
1.342955629,103.7455272,2010-01-01 00:01:42
1.339694956,103.7520503,2010-01-01 00:02:28

s/.../.../n구문(여기서는 n숫자)은 한 줄에서 n번째 일치하는 항목을 대체합니다.

마지막 열을 앞으로 이동하는 방법은 다음과 같습니다.

s/^\(.*\),\([^,]*\)/\2,\1/

즉, 줄의 시작 부분부터 쉼표까지 일치하고 그 다음에는 쉼표가 나오고 더 이상 쉼표를 포함하지 않습니다.

따라서 완전한 명령은 다음과 같을 수 있습니다.

$ sed 's/\./,/4; s/\./,/2; s/^\(.*\),\([^,]*\)/\2,\1/' file
2010-01-01 00:00:00,1.351364711,103.7319660
2010-01-01 00:00:49,1.345529841,103.7372875
2010-01-01 00:01:42,1.342955629,103.7455272
2010-01-01 00:02:28,1.339694956,103.7520503

관련 정보