다음과 같은 수천 개의 행이 있습니다.
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/'
이는 다음 패턴과 일치합니다.
- 반점,
- 정확히 10자리,
- 반점,
- 일부 숫자,
- 마침표(이스케이프됨),
- 일부 숫자,
- 줄 끝
다음으로 교체하세요.
- 반점,
- 10자리(역참조 기준
\1
), - 세 개의 0,
- 반점,
- 역참조로 표시되는 마지막 필드입니다
\2
.