使用sed脚本将每一行的当前行的一部分与下一行的一部分组合

时间:2017-02-11 09:48:56

标签: linux unix sed

所以我想要做的就是将一行的第一部分与下一行的第一部分组合在一起,每隔一行用冒号分隔。

输入数据在下面,我正在努力使它工作。

这就是我想要的样子(想要这样):

Albania:Armenia
Angola:Antarctica
Argentina:American Samoa

这是输入:

Albania,EU,http://en.wikipedia.org/wiki/Albania
Armenia,AS,http://en.wikipedia.org/wiki/Armenia
Angola,AF,http://en.wikipedia.org/wiki/Angola
Antarctica,AN,http://en.wikipedia.org/wiki/Antarctica
Argentina,SA,http://en.wikipedia.org/wiki/Argentina
American Samoa,OC,http://en.wikipedia.org/wiki/American_Samoa
Austria,EU,http://en.wikipedia.org/wiki/Austria
Australia,OC,http://en.wikipedia.org/wiki/Australia
Aruba,NA,http://en.wikipedia.org/wiki/Aruba
Azerbaijan,AS,http://en.wikipedia.org/wiki/Azerbaijan
Bosnia and Herzegovina,EU,http://en.wikipedia.org/wiki/Bosnia_and_Herzegovina
Barbados,NA,http://en.wikipedia.org/wiki/Barbados
Bangladesh,AS,http://en.wikipedia.org/wiki/Bangladesh
Belgium,EU,http://en.wikipedia.org/wiki/Belgium
Burkina Faso,AF,http://en.wikipedia.org/wiki/Burkina_Faso
Bulgaria,EU,http://en.wikipedia.org/wiki/Bulgaria
Bahrain,AS,http://en.wikipedia.org/wiki/Bahrain
Burundi,AF,http://en.wikipedia.org/wiki/Burundi
Benin,AF,http://en.wikipedia.org/wiki/Benin
Saint Barthelemy,NA,http://en.wikipedia.org/wiki/Saint_Barthelemy

到目前为止我提出的是,使用N来获得下一行,它部分起作用。名字的“垃圾”已经消失,但第二名的“垃圾”仍然存在。 (这是一个sed脚本,我必须有一个与所有其他sed脚本一起运行的sed脚本,所以没有awk或任何东西)

s/,..,.+//
{N
s/\n/:/
p
}

我的尝试产生了这个输出:

Azerbaijan:Bosnia and Herzegovina,EU,http://en.wikipedia.org/wiki/Bosnia_and_Herzegovina
Barbados:Bangladesh,AS,http://en.wikipedia.org/wiki/Bangladesh
Belgium:Burkina Faso,AF,http://en.wikipedia.org/wiki/Burkina_Faso
Bulgaria:Bahrain,AS,http://en.wikipedia.org/wiki/Bahrain
Burundi:Benin,AF,http://en.wikipedia.org/wiki/Benin

1 个答案:

答案 0 :(得分:2)

s/,.*//;N;s/\n/:/;s/,.*//

删除逗号后的所有内容,追加下一行,用冒号替换换行符,删除逗号后的所有内容。