【问题标题】:How to split a csv line at every 5th character in Bash?如何在 Bash 中的每 5 个字符处分割一个 csv 行?
【发布时间】:2017-06-29 16:25:42
【问题描述】:

我是 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)

【问题讨论】:

    标签: bash replace sed


    【解决方案1】:

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

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

    【讨论】:

    • 只有最后一行与这个问题有关。而且管道是错误的:因为您使用的是-i,所以没有输出可以通过管道传输到第二个 sed。只需将这 2 个命令放在不同的行上即可。
    【解决方案2】:

    你也可以用这个命令来做:

    先拆分成行,sed将5行合并为一个

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

    【讨论】:

    • 别忘了他要删除每一行的最后一个数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2023-03-08
    • 2013-06-29
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多