将列拆分为2+行;指定定界符和最大字符长度

时间:2018-11-30 17:58:11

标签: bash unix

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

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

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

  • 定界符:“。” {句号后跟一个空格}

  • 最大字符长度:100

  

他告诉我们一个非常激动人心的冒险故事。我们从未去过   亚洲,我们也没有访问非洲。我们应该现在开始上课吗?   我们等待每个人到这里。大家都很忙,所以我去了   电影。在三个星期的时间里的上周五,我看到了一条蓝色的条纹   蠕虫与无腿蜥蜴握手。

Desired Output

这是我尝试过的:

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

1 个答案:

答案 0 :(得分:0)

如果您希望分解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'