awk将整数拆分为若干部分

awk将整数拆分为若干部分,awk,split,integer,Awk,Split,Integer,我有这个整数20120305193821,我想把它分成几个部分2012-03-05-19:38:21,以便在awk中进一步使用。有人能帮忙吗?为什么不使用子字符串?写起来很无聊,但是你暗示你有索引 echo "20120305193821" | awk '{printf "%s-%s-%s-%s:%s:%s\n",substr($1,1,4),substr($1,5,2),substr($1,7,2),substr($1,9,2),substr($1,11,2),substr($1,13,2)}

我有这个整数
20120305193821
,我想把它分成几个部分
2012-03-05-19:38:21
,以便在awk中进一步使用。有人能帮忙吗?

为什么不使用子字符串?写起来很无聊,但是你暗示你有索引

echo "20120305193821" | awk '{printf "%s-%s-%s-%s:%s:%s\n",substr($1,1,4),substr($1,5,2),substr($1,7,2),substr($1,9,2),substr($1,11,2),substr($1,13,2)}'
输出:


2012-03-05-19:38:21

如果您使用的是gawk,则可以使用FIELDWIDTHS:

echo 20120305193821 | gawk '{printf "%s-%s-%s-%s:%s:%s\n",
      $1, $2, $3, $4, $5, $6}' FIELDWIDTHS="4 2 2 2 2 2"

我知道你没有给sed贴上漂亮的标签,所以就在这里贴出来作为参考-

$ echo 20120305193821 | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3-\4:\5:\6/'
2012-03-05-19:38:21

到目前为止你试过什么?我们希望你至少自己尝试过,而不是仅仅做一个“给我代码”。想过用sprintf()或printf()拆分它,但不知道如何将整数拆分成更小的部分。也不能使用split(),因为没有可以拆分整数的FS。可以尝试使用两个数组,一个用于在index()sp=4,2,2,2,2上拆分,另一个作为函数在打印输出上拆分。没有简单的解决方案,这就是我问这个问题的原因。FIELDWIDTHS对我来说是新事物。谢谢!