첫 번째 열의 .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 함수는 datespec 형식 "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
스크립트가 조금 더 장황하다는 것을 알고 있지만 성능이 더 좋기를 바랍니다.
당신이나 다른 사람이 같은 것을 보는 데 도움이되기를 바랍니다.