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
我需要做的是:
- 查找以数字 [0-9] 开头的行。
- 复制由 space ' ' 分隔的前 5 列。
- 将其粘贴到不以数字开头的下一行。
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
我有以下几行:
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
我需要做的是:
- 查找以数字 [0-9] 开头的行。
- 复制由 space ' ' 分隔的前 5 列。
- 将其粘贴到不以数字开头的下一行。
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