我有一个以下格式的文本文件
group1: 2010EL-1749 2010EL-1749_00001 3554-08 3554-08_01855 2010EL-1749_00002
group2: 2010EL-1749 2010EL-1749_00002 3554-08 3554-08_01856 2010EL-1749_00001
group7: 3554-08 2010EL-1749_00001 3554-08_01855
并且想在ID之间添加一个逗号,如下所示
group1: 2010EL-1749,2010EL-1749_00001,3554-08,3554-08_01855,2010EL-1749_00002
group2: 2010EL-1749,2010EL-1749_00002,3554-08,3554-08_01856,2010EL-1749_00001
group7: 3554-08,2010EL-1749_00001,3554-08_01855
答案 0 :(得分:2)
在AWK中,用逗号替换所有空格,然后将第一个逗号替换回空格:
awk 'gsub(/ /,",") && sub(/,/," ")' testfile
或使用gensub
:
awk '$0=gensub(/([^:]) /,"\\1,","g")' testfile
答案 1 :(得分:1)
$ sed 's/ /,/g; s/,/ /' textfile
group1: 2010EL-1749,2010EL-1749_00001,3554-08,3554-08_01855,2010EL-1749_00002
group2: 2010EL-1749,2010EL-1749_00002,3554-08,3554-08_01856,2010EL-1749_00001
group7: 3554-08,2010EL-1749_00001,3554-08_01855
这可以通过将所有空格更改为逗号来实现:s/ /,/g
。然后它会将第一个逗号更改回空格:s/,/ /
。
s/,/ /
是替换命令的示例。表单为s/old/new/
,其中old
是正则表达式,old
的第一个匹配项被new
替换。如果我们在命令的末尾添加g
,例如s/ /,/g
,那么不仅仅会替换第一个:所有非重叠匹配都会被替换。
此方法假定没有ID包含空格,并且组名不包含逗号。
要更改文件:
sed -i.bak 's/ /,/g; s/,/ /' textfile
正如评论中sp asic所建议的,如果我们可以假设所有ID都以数字结尾,那么:
sed 's/\([0-9]\) /\1,/g' textfile
或者,如果相反,我们可以假设只有组,而不是ID,以冒号结尾(帽子提示:詹姆斯布朗):
sed 's/\([^:]\) /\1,/g' testfile