У меня есть файл input.txt с более чем 6000 строк.
Если строка a содержит более 10 слов, то я хочу, чтобы она была разбита, но не на 10-м слове, а там, где появляется первый символ запятой. И, если в новой строке также содержится более 10 слов, то ее также следует разделить и повторять этот процесс 7 раз.
Конечный продукт: нет строк, содержащих более 10 слов и запятых, поскольку они содержат всебыл расколот.
Пример:
Ввод
Line 1: This is me, and my sample test line that I like to get working, and I want to be able to kick some ass while doing it
Ожидаемый вывод:
Line 1: This is me,
Line 2: and my sample test line that I like to get working,
Line 3: and I want to be able to kick some ass while doing it
Я использую следующий код:
#! /bin/bash
for run in {1..7}
do
awk 'NF >= 10 {
sub (", ", ",\n")
}1' input.txt
done
Этот код не дает желаемого результата. Вместо этого я получаю следующий вывод 7 раз.
line 1: This is me,
line 2: and my sample test line that I like to get working, and I want to be able to kick some ass while doing it.
Я склоняюсь к седу, но мне что-то не понятно. Я вижу три подхода: 1) код читает строку (скажем, line7), и в ней более 10 слов, и разбивает ее на запятую (но не проверяет, превышает ли вновь разбитая строка более 10 слов) и переходит на следующую строку. В конце файла, он повторяет этот процесс (скажем, 7 раз), чтобы гарантировать, что новые прерывистые строки также будут меньше 10 слов. ПОТОМ, он берет выходные данные этого процесса и делает то же самое, но с новым условием (например, словом «и»). ПОТОМ, он принимает вывод этого и так далее ... Я могу добавить бесконечные условия. Это подход, который я предпочитаю. Я также думаю, что легче кодировать.
Второй подход 2) Является ли этот код чтением строки, и если он содержит более 10 слов, он разбивает его на запятую, а затем, если все еще более 10 слов, он разбивает это далеечерез запятую и так далее, пока не менее 10 слов. Только тогда он переходит на следующую строку. Я думаю, что это то, что делает код Готи. Но тогда сложно добавить дополнительные условия. 3) 3-й подход заключается в следующем: он разбивает строку на 10 слов через запятую, затем остаток строки прерывается на «и» и так далее. Затем, в конце концов, весь этот процесс повторяется несколько раз. ИМХО это тоже не лучший способ сделать это.
Может кто-нибудь помочь, пожалуйста.
Заранее спасибо!