我认为这应该在sed / awk中可行,对吧? 将以下列表转换为2011.08.01 …等
20110801 20110802 20110803 20110804 20110805 20110808
只是不够聪明,不知道如何去做
任何build议?
使用GNU日期:
for date in 20110801 20110802 20110803 20110804 20110805 20110808; do date -d "$date" +%Y.%m.%d done
它在无效的日期吧。
date -d '20111214' +'%Y.%m.%d'
输入字符串可以接近所有可以被识别为日期的东西。
export V=20111010;echo ${V:0:4}.${V:4:2}.${V:6:2}
所以对于你的情况,像这样的:
while read x; do echo ${x:0:4}.${x:4:2}.${x:6:2}; done
这可能适合你:
sed 's/../.&/3g'
在sed:
sed 's/\(....\)\(..\)\(..\)/\1.\2.\3/'
正如potong在评论中指出的那样,实际上并不需要指定所有的三个组。 你可以改为使用
sed 's/\(....\)\(..\)/\1.\2./'
呆子
gawk '/^[0-9]+$/{print substr($0,1,4)"."substr($0,5,2)"."substr($0,7,2)}' input.txt
对于awk,为什么substr当你有printf?
awk 'NF{printf("%.4s.%.2d.%.2d\n", $1, $1%10000/100, $1%100)}'