LINUX.ORG.RU

Заменить каждое n-ное вхождение в строке

 , ,


0

2

Есть длинная строка с текстом, разделенным символами табуляции. Можно ли с помощью sed сделать замену каждого 10-го tab на символ переноса, чтобы разбить ее на таблицу?

Пробовал так - не получается:

sed -e "s/\t/\x0A/10"
sed -e "s/\t/\x0A/10g"
в первом случае происходит замена только 10-го символа tab, во 2-м 10-го и всех последующих. А как сделать каждый 10-й?

PS: Нашел эту тему, но там говорится о замене первого вхождения в каждой n-ной строке, а не о замене каждого n-ного вхождения в одной строке.


можно еще:

xargs -n 10
(если нет -e/-n и вход не очень большой) или
xargs printf "$(jes %s |head -n10|paste -sd" ")\n"
(если вход меньше ограничений командной строки); а потом |columnt -t

anonymous
()

Можно ли с помощью sed сделать замену каждого 10-го tab на символ переноса

Вместо «переноса», я понимаю, следует читать «перевод»? Можно. Но не нужно. Возьмите любой нормальный язык. Хотя бы АВК.

#!/usr/bin/gawk -E

BEGIN {
    FS = OFS = "\t";
}

{
    for (f = 1; f <= NF; f++) {
        if (f == NF || f % 10 == 0)
            printf "%s%s", $f, ORS;
        else
            printf "%s%s", $f, OFS;
    }
}
Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Но не нужно.

Какой отстой, когда sed лучше читается: зачем-то gawk, какая-то "-E", которая, небось, не везде поддерживается. Eсли уж awk, то хотя бы:

awk -v RS='\t' 'ORS = NR % 10 ? RS : "\n"' | sed '$s/^\t$//'
anonymous
()
Ответ на: комментарий от anonymous

зачем-то gawk

Не нравится АВК, возьмите любой другой нормальный язык.

когда sed лучше читается

ЛОЛШТО?

Eсли уж awk, то хотя бы:
awk -v RS='\t' 'ORS = NR % 10 ? RS : "\n"' | sed '$s/^\t$//'

Мне дико интересно, как зародилась культура генерации подобного отстоя, который потом, когда он разрастается на многие килобайты, приходится мучительно разгребать и переписывать. Вы не знаете? Может быть это из желания повысить собственную незаменимость — я-то-де понимаю, что я написал, а вы пойдите разберитесь, хе-хе...

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от anonymous

Да не за что. Это вам уважуха и респект!

xseed
() автор топика
Ответ на: комментарий от Zmicier

В этой краткости и скорости написания вся суть. Если уж переписывать, то делать это сразу на нормальном языке. АВК, Баш и рядом — не нормальные.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.