如何用分隔符划分输出?

如何用分隔符划分输出?

我想改变:

e·ver·y·bo·dy

到:

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

for更优选循环。

答案1

这也使用了for循环,尽管是 awkfor循环:

$ 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·

从短到长的替代版本

$ 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·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·ver·
e·ver·y·
e·ver·y·bo·
e·ver·y·bo·dy

答案2

你可以通过更短的方式做到这一点命令如下(长到小):

$ 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·

来自小到长如下:

$ awk -F'·' '{i=1; while(i<NF){ print tmp=tmp$((i++))"·"} print $0}' file
e·ver·
e·ver·y·
e·ver·y·bo·
e·ver·y·bo·dy

答案3

如果它必须是一个for循环:

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

首先我们必须设置内部文件分隔符·。然后 for 循环遍历每个部分并打印,但顺序不对。这就是为什么tac最后要反转顺序。

给我输出:

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

答案4

这是一个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来得到所需的输出。

相关内容