출력을 구분 기호로 어떻게 나눌 수 있습니까?

출력을 구분 기호로 어떻게 나눌 수 있습니까?

변경하고 싶은 사항:

e·ver·y·bo·dy

에게:

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

루프 for가 매우 선호됩니다.

답변1

이것은 또한 forawk 루프이기는 하지만 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·

짧은 버전에서 긴 버전으로 대체 버전

$ 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원하는 출력을 얻었습니다.

관련 정보