CSV에서 오른쪽 패드 번호에 sed 사용

CSV에서 오른쪽 패드 번호에 sed 사용

다음과 같은 수천 개의 행이 있습니다.

e0f186cf-c34d-42e9-b8a9-9b9cf1f304e7,TotalNumberOfHandledConnectionsOrSessions,TotalNumbe1211008586,1457343000,179.00

마지막 열은 타임스탬프입니다. 문제는 그것이 초 단위이고 밀리초 단위로 필요하다는 것입니다.

그래서 그 숫자를 000으로 채우고 싶습니다.

그러나 언젠가는 이 행에 밀리초가 포함될 수 있으므로 이 경우 000을 추가하면 안 됩니다.

나는 성공하지 못한 채 sed를 사용하여 이 사이트의 일부 예제를 사용해 보았습니다.

답변1

(GNU) 포함awk

awk 'BEGIN { FS="," ; OFS="," } { if ( length($4)=10 ) { $4=$4"000" ; print $0 } else print $0 }' file

설명하다:

  • BEGIN { FS="," ; OFS="," }: 입력( FS) 및 출력( OFS) 필드 구분 기호를 처음에 쉼표로 설정합니다.
  • 네 번째 열의 길이가 10이고 0을 3개 더해 모두 출력하는 경우
  • 그렇지 않으면 모두 인쇄

답변2

sed 's/,\([0-9]\{10\}\),\([0-9]*\.[0-9]*\)$/,\1000,\2/'

이는 다음 패턴과 일치합니다.

  1. 반점,
  2. 정확히 10자리,
  3. 반점,
  4. 일부 숫자,
  5. 마침표(이스케이프됨),
  6. 일부 숫자,
  7. 줄 끝

다음으로 교체하세요.

  1. 반점,
  2. 10자리(역참조 기준 \1),
  3. 세 개의 0,
  4. 반점,
  5. 역참조로 표시되는 마지막 필드입니다 \2.

관련 정보