CSV 파일의 날짜 형식 변경

CSV 파일의 날짜 형식 변경

다음 형식으로 데이터를 출력하는 프로그램이 있습니다.

date, time,field1,field2,field3,fieldn
12/20/14,08:01:53,318.622,0.93712,21.6867,1.1089

파일에 많은 열이 있으며 모두 동일하게 유지되어야 합니다.

날짜 형식은 미국이지만 미국이 아닌 국가가 필요합니다.

date, time,field1,field2,field3,fieldn,....
20/12/14,08:01:53,318.622,0.93712,21.6867,1.1089,....

이것을 달성하는 가장 쉬운 방법은 무엇입니까? 찾아보니 몇 가지 예가 있지만 정확히 내 경우는 아닙니다. 또한 date 명령인 awk 및 sed를 조사했지만 명령을 생성할 만큼 충분한 지식이 없습니다. 예를 들어이 답변awk를 사용하면 괜찮아 보이지만 내 파일에는 아무런 효과가 없습니다.

저는 Mac을 사용하고 있기 때문에 OSX에서 제공하는 버전에 맞는 명령어가 필요합니다.

답변1

sed -E 's,^([0-9]+)/([0-9]+),\2/\1,'

설명하다

  • sed -E: 확장된 정규식과 함께 sed를 사용하면 탈출 ()등을 할 필요가 없습니다.
  • s/foo/bar/sedfoo: 로 검색하고 바꾸는 일반적인 구문 입니다 bar. 여기서는 표현식에 s가 있기 ,때문에 대신 사용하고 있습니다 . 그러면 단순화됩니다(이스케이프 혼동을 피하기 위해 다시 한 번 말씀드립니다. 따라서 .//s,foo,bar,
  • ^([0-9]+)/([0-9]+)^: 하나 이상의 숫자가 뒤에 오는 줄의 시작 부분을 검색하여 [0-9]+캡처 그룹에 넣습니다 (). 이번 달이에요. 다음은 /다른 캡처 그룹에 있는 하나 이상의 숫자(예: 날짜) 입니다 .
  • \2/\1/: 두 번째 캡처 그룹(일), 그 다음으로 첫 번째 캡처 그룹(월) 으로 바꿉니다 .

용법

파일을 이 명령(예: )으로 파이프 <your_command_here>| sed…하거나 파일에서 직접 실행할 수 있습니다(예: ) sed… file.txt. 그러면 명령줄에 직접 출력됩니다. 새 파일에 쓰려면 > output.txt명령에 추가하세요.

답변2

날짜 형식을 다시 지정할 때 표준(ISO) 형식(YYYY-mm-dd)을 사용하는 것이 좋습니다.

perl -MTime::Piece -F, -lane '
  if ($.>1) {$F[0] = Time::Piece->strptime($F[0], "%m/%d/%y")->strftime("%F")}
  print join ",", @F
'

또한 현지가 아닌 날짜 시간을 고려할 때 이 타임스탬프는 어떤 시간대에 속합니까? 세계시인가요?

관련 정보