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

查看:266
本文介绍了sed/awk/perl:找到一个正则表达式,复制该行的5列并粘贴到下一行的开头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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. 复制前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

非常感谢您提前提供帮助.

Thanks for any help in advance.

干杯, 色拉

推荐答案

awk进行救援!

$ awk '{if($1+0==$1) p=$1 FS $2 FS $3 FS $4 FS $5; else $0=p FS $0}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是字段分隔符,默认情况下是空白.数字测试是通过零加法完成的;管道到column进行漂亮的格式化.末尾的1是打印行($0变量)的简写

here FS is the field separator by default is the white space. Number test is done with zero addition; pipe to column for pretty formatting. The 1 at the end is the shorthand for printing the line ($0 variable)

这篇关于sed/awk/perl:找到一个正则表达式,复制该行的5列并粘贴到下一行的开头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆