これはsed/awkで可能なはずだと思いますよね?誰かが20111214を2011.12.14をUNIXに変換するためのクイックオンライナーを提案できますか?
に任意のsuggestiongsをそれを行う方法を見つけ出すのに十分なだけのスマートではないなど
20110801
20110802
20110803
20110804
20110805
20110808
... 2011年8月1日に以下のリストを変換しますか?
あなたのケースのためにそうこれはsed/awkで可能なはずだと思いますよね?誰かが20111214を2011.12.14をUNIXに変換するためのクイックオンライナーを提案できますか?
に任意のsuggestiongsをそれを行う方法を見つけ出すのに十分なだけのスマートではないなど
20110801
20110802
20110803
20110804
20110805
20110808
... 2011年8月1日に以下のリストを変換しますか?
あなたのケースのためにそうを使用することができます。
for date in 20110801 20110802 20110803 20110804 20110805 20110808; do
date -d "$date" +%Y.%m.%d
done
それは無効な日付にbarfs。
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
私はこれがバッシズムだと考えます。おそらく 'sh 'ではうまくいかないと指摘しておきましょう。 –
私はちょうど新しい言葉をもう一度学びました。バッシュはペストのように聞こえます:-) – hirschhornsalz
POSIX shでは、 'tail = $ {V#????}; echo "$ {V%????}。$ {tail%??} $ {tail#??}" – tripleee
:ASはコメントでpotongによって指摘
sed 's/\(....\)\(..\)\(..\)/\1.\2.\3/'
、それはすべての3つのグループを指定するには、実際には必要ありません。代わりにGNU日付を使用して
sed 's/\(....\)\(..\)/\1.\2./'
3番目のバックリファレンスは必要ですか? – potong
@potongいいえ、必要ありません。 –
date -d '20111214' +'%Y.%m.%d'
入力文字列は、日付として識別できるすべてに近いものにすることができます。
これはあなたのために働くかもしれない
gawk '/^[0-9]+$/{print substr($0,1,4)"."substr($0,5,2)"."substr($0,7,2)}' input.txt
'/^[0-9] + $ /'の代わりに 'NF'を使うと' awk'は空白行をスキップします。 –
私は、/^[0-9] + $ /はNF == 1よりも良いと思う。 – BLUEPIXY
を、??
awk 'NF{printf("%.4s.%.2d.%.2d\n", $1, $1%10000/100, $1%100)}'
あなたは54秒で勝ちました:) – Nikodemus
私はこれがここで最もきれいな解決策だと思います。決して、sed/awkソリューションを手伝ってくれた下の人には、ありがたいことです。よい休日を! –