我有下面的代码,每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个单词的句子)。
示例:
line1:测试行中的短语,我想拆分它,但我不知道如何拆分。
至
line1:测试行中的短语,line2:我想拆分它,但我不知道如何拆分。
如果没有找到逗号字符,则只需返回该行即可。
谢谢!
编辑:或解决方案可以工作。
发布于 2019-10-04 17:51:43
一种更好的方法是使用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循环快数量级)
发布于 2019-10-04 17:51:37
我不确定你是想为10单词还是15单词而分裂。
只需将10替换为15,以防您正在处理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发布于 2019-10-04 17:39:11
下面是一个简单的解决方案,用于检查字符串中的单词数。如果一个字符串中的单词数超过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)https://stackoverflow.com/questions/58240415
复制相似问题