如何为固定长度文件中的每一列重复键值

How to repeat a key value for every column in a fixed length file

我必须在一行中每 14 个字符后重复键值

我的文件如下所示:

KEYVALUE1 201604141111I201604141111C201604141111D201604141111E201604141111F  
KEYVALUE1 201604141111G  
KEYVALUE2 201604141111I201604141111C201604141111D201604141111E201604141111F  
KEYVALUE2 201604141111G201604141111F  
KEYVALUE3 201604141111I  
KEYVALUE4 201604141111G201604141111I  

我的输出应该是这样的,

KEYVALUE1 201604141111I  
KEYVALUE1 201604141111C  
KEYVALUE1 201604141111D  
KEYVALUE1 201604141111F  
KEYVALUE1 201604141111G  
KEYVALUE2 201604141111I  
KEYVALUE2 201604141111C  
KEYVALUE2 201604141111D  
KEYVALUE2 201604141111F  
KEYVALUE2 201604141111G  
KEYVALUE2 201604141111F  
KEYVALUE3 201604141111I  
KEYVALUE4 201604141111G  
KEYVALUE4 201604141111I  

请帮忙。

你可以试试这个sed:

sed -n '/^\([^ ]* \)\(.\{13\}\)/{s/^\([^ ]* \)\(.\{13\}\)/&\n/g;P;D;}' file

或者这个:

sed '{
  :j
  /^[^ ]* .\{13\}.\{13\}/ {
    h
    s/^\([^ ]*\) \(.\{13\}\)\(.*\)$/ /
    p
    x
    s/^\([^ ]*\) \(.\{13\}\)\(.*\)$/ /
    h
    b j
  }
}' file

sed 用于在单行上进行简单替换,仅此而已。对于其他任何事情,您应该使用 awk 来实现简单性、清晰性、健壮性、可移植性、效率和软件的大多数其他理想品质:

$ awk '{ while (!="") { print , substr(,1,13); =substr(,14) } }' file
KEYVALUE1 201604141111I
KEYVALUE1 201604141111C
KEYVALUE1 201604141111D
KEYVALUE1 201604141111E
KEYVALUE1 201604141111F
KEYVALUE1 201604141111G
KEYVALUE2 201604141111I
KEYVALUE2 201604141111C
KEYVALUE2 201604141111D
KEYVALUE2 201604141111E
KEYVALUE2 201604141111F
KEYVALUE2 201604141111G
KEYVALUE2 201604141111F
KEYVALUE3 201604141111I
KEYVALUE4 201604141111G
KEYVALUE4 201604141111I

如果您对 perl 持开放态度:

perl -lane 'print "$F[0] $_" for $F[1] =~/.{13}/g' file