다음 형식으로 데이터를 출력하는 프로그램이 있습니다.
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/
sed
foo
: 로 검색하고 바꾸는 일반적인 구문 입니다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
'
또한 현지가 아닌 날짜 시간을 고려할 때 이 타임스탬프는 어떤 시간대에 속합니까? 세계시인가요?