在bash中爆炸数字

时间:2018-12-27 13:28:57

标签: bash

我如何用bash炸开一个数字

具有此值 '12684041234'

必填结果 '12684041234','1268404123','126840412','12684041','1268404','126840','12684','1268','126','12','1'

8 个答案:

答案 0 :(得分:3)

我不认为有任何内置方法可以执行所需的操作,但是您始终可以使用循环:

n=12684041234
for (( i = ${#n}; i > 0; i-- )) do echo ${n:0:i}; done

这只是从变量$n的长度向下循环到1,并显示$n的子字符串。

答案 1 :(得分:2)

%可用于删除变量值的前缀。

尝试一下:

number=12684041234
while [[ "${#number}" -gt 0 ]] ; do
    printf ",'%s'" "${number}"
    number="${number%?}"
done | cut -b 2-

输出

'12684041234','1268404123','126840412','12684041','1268404','126840','12684','1268','126','12','1'

答案 2 :(得分:2)

如果n小于或等于echo $((2**63-1))

for((n=12684041234;n>0;n/=10));do echo $n;done

答案 3 :(得分:1)

使用Perl和正则表达式

$ echo '12684041234' | perl -ne  ' $x=$_;$i=length($x); while($i>0) { $x=~m/(.{$i})/m; print "$1\n" ; $i-- } '

12684041234
1268404123
126840412
12684041
1268404
126840
12684
1268
126
12
1

感谢Nahuel提供以下解决方案

perl -nE '/^.+(?{say$&})(?!)/' <<<12684041234

答案 4 :(得分:1)

使用GNU awk:

$ echo 12684041234 | awk 'BEGIN{FS=OFS=""}{for(i=NF;i>=1;i--){print;NF--}}'
12684041234
1268404123
126840412
...

答案 5 :(得分:1)

带直流电:

df.groupby('col1').apply(lambda x :x[0:x[x['col2'] == 'event2'].index[0]])

说明:

echo '12684041234' | dc -f - -e '[p10/d0<Z]sZlZx'

答案 6 :(得分:1)

sed有趣的解决方案:

$ sed -n ':a;p;s/.$//;/./ba' <<< 12684041234
12684041234
1268404123
126840412
12684041
1268404
126840
12684
1268
126
12
1

答案 7 :(得分:-1)

我不是在考虑好的做法,而是要解决这个问题。在Python中,解决方案如下:

from functools import reduce

def f_split_word(s_word):
    return s_word

def f_list_explode_word(s_word):
    ret = []
    s_word_split = list(map(f_split_word, s_word))
    for x in range(0, len(s_word_split)):
        ret.append(reduce(lambda x,y: str(x) + str(y), s_word_split if x == 0 else s_word_split[:-x]))   
    return ret

s_word = str('12684041234')
print(f_list_explode_word(s_word))

enter image description here