sed/awk/perl:找到一个正则表达式,复制这一行的 5 列并粘贴到下一行的开头

sed/awk/perl: find a regex, copy 5 columns of this line and paste to it at the beginning of the next lines

我有以下几行:

057         -   -   No    adod3 stptazlqn    10    753
tlm    10    027        
stp    10    021                
12         -   -   No    azad1
bbcz     30    12        
03085         -   -   No    azad1 azad1222
xxaz    1    12        
azzst    1    12        
hss     2    12 

我需要做的是:

  1. 查找以数字 [0-9] 开头的行。
  2. 复制由 space ' ' 分隔的前 5 列。
  3. 将其粘贴到不以数字开头的下一行。
057         -   -   No    adod3 stptazlqn    10    753
057         -   -   No    adod3     tlm    10    027        
057         -   -   No    adod3     stp    10    021                
12         -   -   No    azad1
12         -   -   No    azad1    bbcz     30    12        
03085         -   -   No    azad1 azad1222
03085         -   -   No    azad1    xxaz    1    12        
03085         -   -   No    azad1    azzst    1    12        
03085         -   -   No    azad1    hss     2    12

提前感谢您的帮助。

干杯, 色拉

awk 救援!

$ awk '{if(+0==) p= FS  FS  FS  FS ; else [=10=]=p FS [=10=]}1' file | column -t

057    -  -  No  adod3  stptazlqn  10  753
057    -  -  No  adod3  tlm        10  027
057    -  -  No  adod3  stp        10  021
12     -  -  No  azad1
12     -  -  No  azad1  bbcz       30  12
03085  -  -  No  azad1  azad1222
03085  -  -  No  azad1  xxaz       1   12
03085  -  -  No  azad1  azzst      1   12
03085  -  -  No  azad1  hss        2   12

这里的FS是字段分隔符,默认是白色的space。数字测试是用零加法完成的;管道到 column 以获得漂亮的格式。最后的 1 是用于打印行的 shorthand ([=15=] 变量)

这可能适合您 (GNU sed):

sed -r '/^[0-9]/!G;s/(.*\S)\s*\n((\S+\s*){5}).*/ /;h' file

使用模式匹配从以整数开头的行中提取字段,该整数将附加到没有附加的行。

要正确对齐列,请使用:

sed -r '/^[0-9]/!G;s/(.*\S)\s*\n((\S+\s*){5}).*/ /;h' file | column -t