ある日付形式から他の形式に変換する方法は?


11

日付の形式に問題があります。ある形式から別の形式に、またはその逆に変更したい。私の日付形式は

形式1

YYYY-MM-DD

形式2

MM/DD/YYYY

フォーマット1をフォーマット2に、フォーマット2をフォーマット1に変更したい。


oより明確に、私はファイルfile1名を持っています:日付2000-01-01 2000-01-02 2000-01-03 2000-01-04 ..必要な出力は01 / 01.2000 01/02/2000 01/03 /です。 2000年1
AiB

スラッシュは* nixファイル名に
含める

回答:


14

これにはGNU 'date'を使用してください。また、他のフォーマット間の変換も行います(date --helpフォーマットのリストについては、を参照してください)。

$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05

より明確にするために、私はファイルfile1名を持っています:日付2000-01-01 2000-01-02 2000-01-03 2000-01-04 ..必要な出力は01 / 01.2000 01/02/2000 01/03 /です。 2000年1
AiB

1
@Abrahamこれはどのようにしてその要件を満たさないのですか?
ヨルダン2013

6

あなたが変換する必要があるテキスト形式の日付があると仮定します

echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'

およびその逆

echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'

より明確にするために、私はファイルfile1名を持っています:日付2000-01-01 2000-01-02 2000-01-03 2000-01-04 ..必要な出力は01 / 01.2000 01/02/2000 01/03 /です。 2000年1
AiB

1_CRに感謝します。少し変更した後、現在は機能しています。#!/ bin / bash echo '$ 1- $ 2- $ 3' | AWK -v FS = - -v OFS = / '{$ 1、$ 3 $ 2印刷}' data.file
AiBは

@アブラハム、あなたはドリューベンのdateアプローチで運を試すべきです、それは確かによりエレガントです
iruvar

3
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY

これらの日付がたくさんあるファイルがある場合は、1行に1つ:

awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file

0

次のようにsedを使用します。

$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13

0

ファイル名の日付形式を変更する方法に関するコメントの明確な質問に答えるには、drewbennのgnu dateアプローチのバリアントを使用します。このコマンドは、ローカルフォルダー内のすべてのファイルを検索し、ファイル名のみをにパイプしxargsdate変更されたファイル名mvを、名前変更を実行する2番目の引数として置き換えます。

コマンドbashbash評価するために、変数の置換を少し回路的に使用する必要がありますdate

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.