我如何用bash炸开一个数字
具有此值 '12684041234'
必填结果 '12684041234','1268404123','126840412','12684041','1268404','126840','12684','1268','126','12','1'
答案 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))