如何在Bash中每隔5个字符拆分csv一行?

时间:2017-02-11 09:33:25

标签: bash replace sed

我是linux新手并试图找出问题所在。虽然在网上有一些类似的例子,但我没有足够的知识根据我的需要修改它们(Sed很难解释),为此道歉。

我的问题是;我有一个单行文本(csv)文件(列号变化50-150),如下所示:

20,30,10,50,4,6,14,5,24,1.19,2,23,4000,12,56,43,1.2,78,334,77...etc.

我首先要做的是在每第5个数字后打一个段落然后删除每个新行的最后一个数所以它看起来像;

20,30,10,50

6,14,5,24

2,23,4000,12

...etc

我怎样才能在Bash中处理这个问题?

感谢您的回答。

(值得一提的是下一步。我会尝试将上面的内容转换成这个;

somefixedtext,20,30,10,50,someotherfixedtext

somefixedtext,6,14,5,24,someotherfixedtext

somefixedtext,2,23,4000,12,someotherfixedtext

...etc)

2 个答案:

答案 0 :(得分:0)

好的,非常感谢@Cyrus,他的解决方案非常适合我。

sed -ri 's/([ \,]+[^ \,]*){1}$//' ${f}
sed -ri 's/([^,]*,[^,]*,[^,]*,[^,]*),[^,]*,/\1\n/g' ${f}
sed -i 's/.*/somefixedtext,&,someotherfixedtext/' ${f}

答案 1 :(得分:0)

您也可以使用此命令执行此操作:

首先将其拆分为行,然后将5行合并为一行

cat yourFile | tr ',' '\n' | sed -e 'N;N;N;N;s/\n/,/g'