如何使用AWK拆分CCYY | MM | DD | HH | MN格式的字符串201702221015

如何使用AWK拆分CCYY | MM | DD | HH | MN格式的字符串201702221015,awk,Awk,如何使用awk在CCYY | MM | DD | HH | MN格式中拆分字符串201702221015,即将字符串201702221015拆分为2017 | 02 | 22 | 10 | 15?@Hanif:尝试一下(尽管我不确定要求): 为什么要使用awk?sed更有意义: echo "201702221015" | sed -E 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1|\2|\3|\4|\5/' gensub()的

如何使用awk在
CCYY | MM | DD | HH | MN
格式中拆分字符串
201702221015
,即将字符串
201702221015
拆分为
2017 | 02 | 22 | 10 | 15

@Hanif:尝试一下(尽管我不确定要求):


为什么要使用awk?sed更有意义:

echo "201702221015" | sed -E 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1|\2|\3|\4|\5/'

gensub()的GNU awk单向:


另一种解决方案,使用
gnu awk

你得到

2017|02|22|10|15

WRT <代码> SED产生了更多的意义 -SED只比AWK更有意义,如果您从命令行调用一个内衬来做这一个特定的事情(但是,您应该选择考虑使用外壳构建替代机制而不是SED)。但是,如果您正在编写一个脚本来处理一般的文本,那么您应该使用awk,因此在这一部分中使用sed没有任何意义
$ awk 'BEGIN{print gensub(/(..)(..)(..)(..)$/,"|\\1|\\2|\\3|\\4",1,201702221015)}'
2017|02|22|10|15
echo "201702221015" | awk 'BEGIN{FIELDWIDTHS = "4 2 2 2 2"; OFS="|"}$1=$1'
2017|02|22|10|15