如何使用获取指定的行并将其附加到前一行

时间:2013-12-23 01:54:11

标签: sed awk

Txt文件:

ruby193-rubygem-sqlite3-doc.noarch  1.3.6-1.el6       rhel-x86_64-server-6-ost-3
ruby193-rubygem-test_declarative.noarch
                                    0.0.5-3.el6       rhel-x86_64-server-6-ost-3
ruby193-rubygem-test_declarative-doc.noarch
                                    0.0.5-3.el6       rhel-x86_64-server-6-ost-3
ruby193-rubygem-therubyracer.x86_64 0.11.0-0.5.beta5.el6
                                                      rhel-x86_64-server-6-ost-3
ruby193-rubygem-therubyracer-doc.noarch
                                    0.11.0-0.5.beta5.el6
                                                      rhel-x86_64-server-6-ost-3
ruby193-rubygem-thin.x86_64         1.3.1-8.el6ost    rhel-x86_64-server-6-ost-3
ruby193-rubygem-thin-doc.x86_64     1.3.1-8.el6ost    rhel-x86_64-server-6-ost-3
ruby193-rubygem-thor.noarch         0.15.4-1.el6      rhel-x86_64-server-6-ost-3
ruby193-rubygem-thor-doc.noarch     0.15.4-1.el6      rhel-x86_64-server-6-ost-3
ruby193-rubygem-tilt.noarch         1.3.3-9.el6       rhel-x86_64-server-6-ost-3

我想将'版本'附加到前一行

例如: 从:

ruby193-rubygem-therubyracer-doc.noarch
                                    0.11.0-0.5.beta5.el6
                                                      rhel-x86_64-server-6-ost-3

为:

ruby193-rubygem-therubyracer-doc.noarch 0.11.0-0.5.beta5.el6  rhel-x86_64-server-6-ost-3 

并保留其他默认值。

4 个答案:

答案 0 :(得分:0)

$ gawk -v RS='\0' '{ gsub ("\n\\s+", " "); print }' inputfile | column -t

您需要任何评论吗?

答案 1 :(得分:0)

awk 'NF<3 {ORS=""; i+=NF} NF==3||i==3 {ORS="\n";i=0}1' input | column -t

答案 2 :(得分:0)

另一种变化:

awk '{$1=$1} /^ruby/{if(s)print s;s=$0;next} {s=s" "$0} END {print s}' file

{$1=$1}用于清理额外的空格。

答案 3 :(得分:0)

使用xargs

xargs -n3 < file