如何用分隔符號劃分輸出?

如何用分隔符號劃分輸出?

我想改變:

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獲得所需的輸出。

相關內容