我需要这样做,所以当我在excel中打开.csv时,每一列都有自己的选项卡。
我的短信是这样的:
smmsp Purpose - Service account for Sendmail; Owner - sysadmin; SERVICE ACCOUNT n Account expires : never
samba Purpose - Service account for Samba; Owner - sysadmin; SERVICE ACCOUNT n Account expires : never
puppet Purpose - Service account for Puppet; Owner - sysadmin; SERVICE ACCOUNT n Account expires : never
我需要这样的东西:
smmsp, Purpose - Service account for Sendmail; Owner - sysadmin; SERVICE ACCOUNT, n, Account expires : never,
samba, Purpose - Service account for Samba; Owner - sysadmin; SERVICE ACCOUNT, n, Account expires : never,
puppet, Purpose - Service account for Puppet; Owner - sysadmin; SERVICE ACCOUNT, n, Account expires : never,
我试图将outpu输送到awk 'gsub(" ", ",", $1)' FS=, OFS=,
,但它用逗号替换了每个空格。
发布于 2016-12-28 06:25:49
输入文件显示为固定宽度的格式.您应该能够在Excel中打开它并指定每个列的位置,而不需要任何修改。
但是,由于输入示例中的所有字段似乎至少包含2个或更多空格,所以可以用逗号替换所有出现的2个或更多空格:
sed -r 's/ \+/,/g' input.txt
注意事项:
-r
),可在GNU中使用下面是另一种方法,将逗号放在固定宽度字段的末尾,然后删除额外的空格。本例中固定宽度字段的宽度基于输入示例:
sed 's/\(.\{19\}\)\(.\{101\}\)\(.\{5\}\)/\1,\2,\3,/' columns.txt | sed 's/ *,/,/g'
后一种方法不需要扩展正则表达式,即使条目填充了整个固定宽度字段,也应该工作。
发布于 2016-12-28 07:11:49
由于您似乎希望保留内部间距,所以我会做类似@cherdt的解决方案,但是您可以捕获以下空格
sed -e 's/\( \+\)/,\1/g' input
它将在两个或更多空格的每个块前面加上一个逗号,而不改变空格的数目。
https://unix.stackexchange.com/questions/331942
复制