.csv
첫 번째 열 형식의 날짜와 시간이 포함된 파일이 있습니다 . 01/20/2016 23:53:01
내 열은 세미콜론으로 구분됩니다.
01/21/2016 03:03:01;18616;0;1
01/21/2016 03:13:01;29040;36553;2
…
존재하다그래서bash 명령을 찾았습니다
date -d '06/12/2012 07:21:22' +"%s"
이것은 내가 원하는 것에 작동합니다. awk
첫 번째 열을 교체하기 위해 지금 통합을 시도했습니다 . 내가 하나 찾았어비슷한 질문에 답하세요:
awk -F'"' -v OFS='"' '$8 {cmd="date -d \""$8"\" +%FT%T%z"; cmd | getline $8; close(cmd)} 1' input.json
나는 그것을 내 자신의 입력에 적용하려고 노력합니다. 그러나 내가 얻는 결과는 비어 있습니다.
답변1
질문을 쓰면서 마침내 문제를 해결했습니다. 이것이 내 해결책입니다.
awk -F';' -v OFS=';' '$1 {cmd="date -d \""$1"\" +%s"; cmd | getline $1; close(cmd)} 1' datetime.csv > unix.csv
두 가지가 결합된 것이었습니다. 켜는 것을 놓쳤고 "
, +%s"
입력 내용에 줄이 끊어졌습니다.
답변2
GNU 날짜에는 -f
파일에서 읽은 날짜를 한 줄씩 변환하는 옵션이 있습니다. 파일이 매우 길면 date
한 줄에 한 번 호출하는 것보다 빠릅니다. 날짜는 독립형이어야 하므로 첫 번째 열( cut -d \; -f 1
)을 분리하여 실행하여 date -f -
변환을 수행하는 것이 계획입니다.반죽나머지 열에 대한 결과입니다.
paste -d \; <(<input cut -d \; -f 1 | date -f - +%s) <(<input cut -d \; -f 2-)
이것은 쉘이 지원한다고 가정합니다.프로세스 교체(ksh93, bash, zsh). plain 의 경우 sh
지원되는(가장 많이 지원되는) Unix 변형에서 /dev/fd
파일 설명자 섞기를 사용할 수 있습니다.
<input cut -d \; -f 2- | {
exec 3<&0
<input cut -d \; -f 1 | date -f - +%s | paste -d \; - /dev/fd/3
}
답변3
어 허. 글쎄요, 꽤 오래 전 일이지만 제안을 드리는 것이 좋겠다고 생각했습니다.
줄이 많으면 쉘로 가서 파일의 각 줄에 대해 "date"를 호출하는 것이 약간 느릴 수 있다고 확신합니다.
Google 캘린더에서 가져온 작업표 항목을 처리하고 일부 HTML을 출력하여 PDF 인보이스로 변환하는 스크립트를 작성할 계획입니다. 그런데 그 얘기를 하기에는 너무 길어지네요. 그래서 나는 읽는 시간을 절약하기 위해 코드를 제공하고 있습니다.
저는 AWK 함수 gensub 및 mktime [https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html]을 사용하고 있습니다. mktime 함수에는 "YYYY MM DD HH MM SS [DST]" 날짜 사양 형식의 입력이 필요하므로 입력을 gensub 함수가 있는 위치로 이동해야 합니다. 이것이 내가 당신을 위해 가지고 있는 것입니다...
awk -F';' -v OFS=';' '{ $1=mktime(gensub(/(..)\/(..)\/(....) (..):(..):(..)/, "\\3 \\1 \\2 \\4 \\5 \\6", 1, $1)); } 1' datetime.csv > unix.csv
나는 약간 다르게 작업하고 첫 번째 매개변수를 다시 작성하는 대신 개별 매개변수를 인쇄합니다. 좀 더 자기 문서화;) 팀토위디
awk -F';' -v OFS=';' '{ print mktime(gensub(/(..)\/(..)\/(....) (..):(..):(..)/, "\\3 \\1 \\2 \\4 \\5 \\6", 1, $1)), $2, $3, $4; }' datetime.csv > unix.csv
스크립트가 약간 장황하다는 것을 알고 있지만 성능이 더 좋았으면 좋겠습니다.
이것이 당신이나 다른 사람이 같은 것을 보는 데 도움이 되기를 바랍니다.