【问题标题】:Split Column into 2+ Rows; Specify Delimiter & Maximum Character Length将列拆分为 2+ 行;指定分隔符和最大字符长度
【发布时间】:2018-12-01 06:22:40
【问题描述】:

我有一个包含 10 列和 30,000 多行的数据文件。我需要预处理这个数据文件以供下游使用(最终文件格式必须是 Excel;不幸的是,不能将其保留为纯文本文档)。

我遇到的问题是第 7 列中的几行超出了 Excel 的字符限制 (32,767)。如何指定拆分第 7 列,使其不超过字符数限制,但同时保持列中文本的上下文? (第 7 列包含一堆句子,我不想将它们分解)。

例如/简单性:以下段落在“A”列中。我想将这一段分成“X”行,如图所示,以便 A 列中的每一行在保持句子结构的同时不超过 100 个字符。

  • 分隔符:“.” {句点后跟一个空格}

  • 最大字符长度:100

他给我们讲了一个非常激动人心的冒险故事。我们从未去过 亚洲,我们也没有去过非洲。我们现在应该开始上课,还是应该 我们等着大家来。大家都很忙,所以我去了 一个人看电影。三周后的上周五,我看到了一条蓝色条纹 蠕虫与没有腿的蜥蜴握手。

这是我尝试过的:

  • sed/gsub :但这会替换分隔​​符的每个实例
  • fold :但我不知道如何指定除空格以外的分隔符,并且使用空格作为换行会破坏句子。
  • substr :我认为这可能是要走的路,但现在,它只是(1)输出第一个“行”和(2)以最大字符长度而不是分割段落在我想要的分隔符处。
cat paragraph | awk -F ". " 'BEGIN { OFS="\n\n"}; { $0=substr($0,1,100); print}'

【问题讨论】:

    标签: bash unix


    【解决方案1】:

    如果您有兴趣拆分 A 列,可以使用sed
    您尝试匹配尽可能多的字符,最大值为 99,后跟一个点和一个空格。
    用换行符替换最后一个空格。

    columnA="He told us a very exciting adventure story. We have never been to Asia, nor have we visited Africa. Should we start class now, or should we wait for everyone to get here. Everyone was busy, so I went to the movie alone. Last Friday in three week’s time I saw a striped blue worm shake hands with a legless lizard."
    echo "${columnA}" | sed -r 's/(.{1,99}\.) /\1\n/g'
    

    【讨论】:

    • 谢谢!事后看来,我是如此接近!
    猜你喜欢
    • 2011-02-07
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多