bash: iso 날짜를 d:m:y로 변환

bash: iso 날짜를 d:m:y로 변환

다음과 같은 출력(iso 형식 날짜)을 생성하는 프로그램이 있습니다.

2010-06-04 15:48:17 +0200
2010-06-04 12:34:39 +0200
2010-02-01 14:02:44 +0200
2010-06-04 12:21:19 +0200
2010-06-04 12:21:04 +0200
2009-05-02 15:38:14 +0200
2009-03-02 15:38:09 +0200
2010-06-04 14:45:00 +0200
...

출력을 고유하고 정렬된 날짜로 변환하려면 어떻게 해야 합니까?

2010-06-04
2010-02-01
2009-05-02
2009-03-02

그런 다음 각 고유 날짜에 다음을 실행합니다. mycommand --withargs [yyyy-mm-dd]?

답변1

다음을 수행할 수 있습니다.

$ <iso_command> | awk '{print $1}' | sort -u | xargs -n 1 mycommand --withargs

답변2

다른 시간대에서 데이터를 가져오려는 경우 간단한 텍스트 구문 분석 도구를 사용하는 것이 최선의 방법이 아닐 수 있습니다.

형식화된 문자열을날짜명령을 내린 다음 원하는 대로 다시 포맷하여 사용하세요. 간단한 awk 또는 cut은 완전히 정확하지 않은 결과를 반환할 수 있습니다. 예를 들어 PST에 있지만 얻은 데이터가 UTC에 있는 경우 날짜는 데이터 동안 24시간 중 7시간만큼 어긋나게 됩니다.

$echo '2010-06-04 15:48:17 +0200' | xargs -I var_d date --date='var_d' +%Y-%m-%d
2010-06-04

답변3

cut -c 1-10 -|sort -ru

또는

cut -c 1-10 /path/to/myfile |sort -ru

답변4

dateGNU coreutils에서 가정하면 ,

program > dates
while read isodate; do
    ymd=$(date -d "$isodate" +'%Y-%m-%d')
    mycommand --withargs "$ymd"
done < dates

관련 정보