【问题标题】:partition text with no fixed width没有固定宽度的分区文本
【发布时间】:2017-10-12 01:29:25
【问题描述】:

我有一些这样的文字

blue chile               green   morning dawn
red  turkey              pink    morning dawn
white south africa       red     evening midst & more

我想这样拆分(注意管道分隔符)

blue child | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more

没有固定宽度,所以我无法分割文本

【问题讨论】:

  • 在我看来,它们的宽度是固定的。是什么让你说他们不是?
  • 是的,它们是固定宽度!才意识到

标签: csv text awk


【解决方案1】:

这可能是您正在寻找的:

$ sed -E 's/ {3,}/ | /; s/  */ /g' file
blue chile | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more

以上假设您的 2 个“字段”由 3 个或更多空白字符分隔,如您发布的示例输入中所示。它将在 GNU 或 OSX sed 中为 -E 工作以启用 ERE。

否则,如果字段在您发布的输入中确实是固定宽度,那么为了提高稳健性,请考虑将 GNU awk 用于 FIELDWIDTHS:

$ awk -v FIELDWIDTHS='25 8 999' -v OFS=' | ' '{print $1, $2, $3}' file
blue chile                | green    | morning dawn
red  turkey               | pink     | morning dawn
white south africa        | red      | evening midst & more

$ awk -v FIELDWIDTHS='25 8 999' -v OFS=' | ' '{print $1, $2 $3}' file
blue chile                | green   morning dawn
red  turkey               | pink    morning dawn
white south africa        | red     evening midst & more

$ awk -v FIELDWIDTHS='25 8 999' -v OFS=' | ' '{$0 = $1 OFS $2 $3; gsub(/ +/," ")} 1' file
blue chile | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more

【讨论】:

  • 不知道 FIELDWIDTH。那么,是否可以按列号 25、55 和 67 进行分区?
  • 是的,随便你...见gnu.org/software/gawk/manual/gawk.html#Constant-Size。对于其他 awk,您将使用 while() substr() 循环。
  • 感谢 substr 和 fieldwidths 提示
【解决方案2】:

如果你想规范化除了管道分隔符之外的空格

$ sed -r 's/(.{25})/\1 | /' file | tr -s ' '

blue chile | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more

这与您的输出相匹配,但请注意red turkey 中的额外空间也被删除。如果您想保留它,则需要额外的步骤。

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 2012-10-28
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2013-01-01
    • 2010-12-16
    相关资源
    最近更新 更多