Как я могу разделить вывод с разделителем?

Я хотел бы изменить:

e·ver·y·bo·dy

на:

e·ver·y·bo·dy
e·ver·y·bo·
e·ver·y·
e·ver·
e·

Петля for будет весьма предпочтительной.

3
задан 20 March 2015 в 11:37

4 ответа

Это также использует for цикл, хотя цикл awk for:

$ echo "e·ver·y·bo·dy" | awk -F· -v OFS=· '{print;for (i=NF;i>1;i--){$i="";print;NF--} }'
e·ver·y·bo·dy
e·ver·y·bo·
e·ver·y·
e·ver·
e·

Альтернативная версия от короткого до длинного

$ echo 'e·ver·y·bo·dy' | awk -F· -v OFS=· '{for (i=1;i<=NF;i++){for (j=1;j<=i;j++)printf "%s%s",$j,j<NF?OFS:"";print""} }'
e·
e·ver·
e·ver·y·
e·ver·y·bo·
e·ver·y·bo·dy

Другое Изменение

$ echo 'e·ver·y·bo·dy' | awk -F· -v OFS=· '{s="";for (i=1;i<=NF;i++){s=s OFS $i; printf "%s",substr(s,2); print (i==NF)?"":OFS} }'
e·
e·ver·
e·ver·y·
e·ver·y·bo·
e·ver·y·bo·dy
2
ответ дан 20 March 2015 в 11:37

Вот python решение:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
input_str = 'e·ver·y·bo·dy'
input_list = input_str.split('·')
print input_str
i = len(input_list)
while i > 1:
    print '·'.join(input_list[:i-1]) + '·'
    i -= 1

Здесь мы сначала split входная строка с помощью · как разделитель для генерации списка и затем использовал разрезание списка и join для получения желаемого вывода.

1
ответ дан 20 March 2015 в 11:37

Можно сделать это короче команда как ниже (долго к маленькому):

$ awk -F'·' '{while (NF){ print $0;NF--;ORS="·\n"}}' OFS='·' file
e·ver·y·bo·dy
e·ver·y·bo·
e·ver·y·
e·ver·
e·

И от маленького до долго как следующее:

$ awk -F'·' '{i=1; while(i<NF){ print tmp=tmp$((i++))"·"} print $0}' file
e·
e·ver·
e·ver·y·
e·ver·y·bo·
e·ver·y·bo·dy
2
ответ дан 20 March 2015 в 11:37

Если это должно быть for цикл:

IFS=·
for l in $(echo "e·ver·y·bo·dy"); do x="$x$l·"; echo "$x"; done | tac

Первый мы должны установить внутренний разделитель файлов к ·. Тогда для цикла выполняет канавку каждый мир и печать это, но в неправильном порядке. Вот почему tac в конце инвертирует порядок.

Дает мне вывод:

e·ver·y·bo·dy·
e·ver·y·bo·
e·ver·y·
e·ver·
e·
1
ответ дан 20 March 2015 в 11:37

Другие вопросы по тегам:

Похожие вопросы: