2011-12-14 10 views

答えて

7

を使用することができます。

for date in 20110801 20110802 20110803 20110804 20110805 20110808; do 
      date -d "$date" +%Y.%m.%d 
    done 

それは無効な日付にbarfs。

+0

あなたは54秒で勝ちました:) – Nikodemus

+0

私はこれがここで最もきれいな解決策だと思います。決して、sed/awkソリューションを手伝ってくれた下の人には、ありがたいことです。よい休日を! –

3
export V=20111010;echo ${V:0:4}.${V:4:2}.${V:6:2} 

、のようなもの:

のsedで
while read x; do echo ${x:0:4}.${x:4:2}.${x:6:2}; done 
+0

私はこれがバッシズムだと考えます。おそらく 'sh 'ではうまくいかないと指摘しておきましょう。 –

+0

私はちょうど新しい言葉をもう一度学びました。バッシュはペストのように聞こえます:-) – hirschhornsalz

+0

POSIX shでは、 'tail = $ {V#????}; echo "$ {V%????}。$ {tail%??} $ {tail#??}" – tripleee

3

:ASはコメントでpotongによって指摘

sed 's/\(....\)\(..\)\(..\)/\1.\2.\3/' 

、それはすべての3つのグループを指定するには、実際には必要ありません。代わりにGNU日付を使用して

sed 's/\(....\)\(..\)/\1.\2./' 
+0

3番目のバックリファレンスは必要ですか? – potong

+0

@potongいいえ、必要ありません。 –

7
date -d '20111214' +'%Y.%m.%d' 

入力文字列は、日付として識別できるすべてに近いものにすることができます。

1

これはあなたのために働くかもしれない

gawk '/^[0-9]+$/{print substr($0,1,4)"."substr($0,5,2)"."substr($0,7,2)}' input.txt 
+0

'/^[0-9] + $ /'の代わりに 'NF'を使うと' awk'は空白行をスキップします。 –

+0

私は、/^[0-9] + $ /はNF == 1よりも良いと思う。 – BLUEPIXY

3

のgawk:あなたはprintfのいる理由のsubstrのawkについては

sed 's/../.&/3g' 
+0

+1の簡潔さ。 – Nikodemus

0

を、??

awk 'NF{printf("%.4s.%.2d.%.2d\n", $1, $1%10000/100, $1%100)}' 
関連する問題