在第一个逗号出现的地方用10个以上的单词拆分行/句子

2024-04-26 15:12:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,每10个单词拆分一行。你知道吗

    #!/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个字。相反,我希望分割点是第一个逗号字符(仅适用于超过10个单词的句子)。你知道吗

示例:

第1行:来自测试行的短语,我想拆分,但我不知道如何拆分。你知道吗

第1行:来自测试行的短语, 第二行:我想分开,但我不知道怎么分开。你知道吗

如果找不到逗号字符,则只需返回该行。你知道吗

谢谢!你知道吗

编辑:Python或Bash解决方案可以工作。你知道吗


Tags: 代码echobashforreadbinlinecounter
3条回答

下面是一个简单的解决方案,它检查字符串中的字数。如果字符串中的字数大于10,则将拆分:

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)

我不确定您是要拆分10个单词还是15个单词。你知道吗

在处理15单词时,只需将10替换为15。你知道吗

awk -v OFS=, 'NF > 10{ sub(/, */, ",\n", $0); print }' input.txt

或者更清楚地说:

#! /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

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

awk 'NF >= 15 {sub (", ", ",\n")}1' file

示例使用/输出

使用file中的输入,您将拥有:

$ 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循环快几个数量级)

相关问题 更多 >