首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用超过10个单词分隔行/句子,其中第一个逗号出现

用超过10个单词分隔行/句子,其中第一个逗号出现
EN

Stack Overflow用户
提问于 2019-10-04 16:51:25
回答 4查看 190关注 0票数 1

我有下面的代码,每10个单词将行分开。

代码语言:javascript
复制
    #!/bin/bash

while read line
do
counter=1;
    for word in $line
    do
        echo -n $word" ";
    if (($counter % 10 == 0))
      then
        echo "";
    fi
    let counter=counter+1;
    done
done < input.txt

问题是,分裂点是第十个单词。相反,我希望分裂点成为第一个逗号字符(只适用于超过10个单词的句子)。

示例:

line1:测试行中的短语,我想拆分它,但我不知道如何拆分。

line1:测试行中的短语,line2:我想拆分它,但我不知道如何拆分。

如果没有找到逗号字符,则只需返回该行即可。

谢谢!

编辑:或解决方案可以工作。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-04 17:51:43

一种更好的方法是使用awk并测试15个或更多的单词,如果是这样的话,只需用",\n"代替", "

代码语言:javascript
复制
awk 'NF >= 15 {sub (", ", ",\n")}1' file

示例使用/输出

有了file中的输入,您就可以获得:

代码语言:javascript
复制
$ awk 'NF >= 15 {sub (", ", ",\n")}1' file
phrase from a test line,
which I want to split, and I don't know how.

(如果您有大量的行,awk将比shell循环快数量级)

票数 2
EN

Stack Overflow用户

发布于 2019-10-04 17:51:37

我不确定你是想为10单词还是15单词而分裂。

只需将10替换为15,以防您正在处理15单词。

代码语言:javascript
复制
awk -v OFS=, 'NF > 10{ sub(/, */, ",\n", $0); print }' input.txt

或者更清楚地说:

代码语言:javascript
复制
#! /bin/bash

awk -v OFS=, 'NF > 10{

    # enter this block iff words > 10

    # replace first occurence of , and additional space,
    # if any, with newline
    sub(/, */, ",\n", $0)
    print

}' input.txt
票数 2
EN

Stack Overflow用户

发布于 2019-10-04 17:39:11

下面是一个简单的解决方案,用于检查字符串中的单词数。如果一个字符串中的单词数超过10个,那么它将被拆分:

代码语言:javascript
复制
output = []
s = 'phrase from a test line, which I want to split, and I dont know how'
while len (s.split()) > 10:
    first_sent,s = s.split(',',1)
    output.append(first_sent)
output.append(s)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58240415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档