2017-02-11 220 views
0

因此,我想要做的事情是将一行的第一部分与下一行的第一部分结合起来,每隔一行用冒号分隔。使用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脚本所以没有AWK或任何运行的sed脚本)

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 

回答

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

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

+0

哦,我的天哪,很快就感谢你看起来很完美 – fman

+0

是的,比'paste -d:<(cut -d,-f1 inputfile | sed'$ d')<(cut -d,-f1 inputfile | sed'1d')',upvoted。 –

相关问题