разделить строки / предложение с более чем 10 словами, где появляется первая запятая - PullRequest
1 голос
/ 04 октября 2019

У меня есть следующий код, который разбивает строку каждые 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 словами).

пример:

line1: фраза из тестовой строки, которую я хочу разбить, и я не знаю как.

до

line1: фраза из тестовой строки, line2: которую я хочу разбить, и я не знаю, как.

Если символ запятой не найден,затем просто верните строку.

Спасибо!

Редактировать: Будет работать решение на Python или Bash.

Ответы [ 4 ]

2 голосов
/ 04 октября 2019

Я не уверен, хотите ли вы разделить 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
2 голосов
/ 04 октября 2019

Лучшим подходом является использование 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 будет ордером из-магнитнее, чем оболочка петли)

0 голосов
/ 05 октября 2019

Это простая версия вопроса for loop в bash просто печатает n раз команду вместо повторения

Простая версия может обрабатываться с помощью

# For each line with 10 words append a newline after the first comma
sed -r '/((\w)+ ){10}/s/,/,\n/' input.txt
0 голосов
/ 04 октября 2019

Вот простое решение, которое проверяет количество слов в строке. если количество слов в строке больше 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...