বাশ: ওয়ার্ডলিস্ট তৈরি করা


0

আমি possible a..z} এবং {0..9} এর মধ্যে প্রতিটি সম্ভাব্য সংমিশ্রণ আউটপুট দেওয়ার চেষ্টা করছি; এই সরঞ্জাম যেমন ব্যবহার না করে এই আউটপুট crunch:

$ head wordlist.txt

a
b
c
1
2
3
aa
ab
ac
a1

$ tail wordlist.txt

333332c
3333321
3333322
3333323
333333a
333333b
333333c
3333331
3333332
3333333

আমরা কি রেজেক্সের সাথে করতে পারি? আমি এই জাতীয় জিনিসের সংমিশ্রণ চেষ্টা করেছি:

for i in $(<magic here>); do
  echo "$i"
done

কিন্তু এটি আমাকে কোথাও পাইনি ...

উত্তর:


1

সমস্যাটি হ'ল এটি বরং দ্রুতই বিশাল আকার ধারণ করে: 36 টির (6 ছোট অক্ষর) বরাবর 6 টি বর্ণের সমস্ত অনুক্রম: 36 ** 6 = 2176782336 যা 2176 মিলিয়ন। আকার (6) দিয়ে গুণ করুন এবং আপনার 12 গিগাবাাইটের প্রয়োজন। সুতরাং আপনি সত্যিই পুরো তালিকাটি তৈরি করতে পারবেন না। পাইথনে আপনার মতো "জেনারেটর" ব্যবহার করতে না পারলে (যা আপনার প্রয়োজন মতো লুপের মান তৈরি করে) আপনার কিছু করার দরকার:

for t1 in $chars; do 
    for t2 in $chars; do 
        for t3 in $chars; do 
            for t4 in $chars; do 
                for t5 in $chars; do
                    echo $t1$t2$t3$t4$t5
                done
            done
        done
    done
done

আপনার যদি আরও ছোট স্ট্রিং দরকার হয়:

#! /bin/bash

chars=('' a b c)

for t1 in "${chars[@]}"; do 
    for t2 in "${chars[@]}"; do 
        for t3 in "${chars[@]}"; do
            echo $t1$t2$t3
        done
    done
done

আমার সিস্টেম মনিটরের মতে, কোডটি ব্যাশ প্রক্রিয়া দ্বারা ব্যবহৃত মেমরিটিকে উল্লেখযোগ্যভাবে বাড়ায় না (প্রায় 2MB এর পাশাপাশি এটি 29.5MB অনুসারে আউটপুট উত্পাদন করে pv -b)। তুলনার জন্য, এই সমতুল্য কোড (কিছুটা সংক্ষিপ্ত তালিকা সহ):

for t in {a..t}{a..t}{a..t}{a..t}{a..t} ; do 
    echo $t
done

চালাতে 600MB র‌্যাম লাগে।

বিচক্ষনতার সঙ্গে বেছে নাও :)


জেনয়েড - তুমি কি আমাকে হতাশ করেছ? এছাড়াও, আপনার উত্তর "এ", "

না, আমি কোনও কিছুই
হ্রাস করিনি

0

আপনার এটি কতটা সঠিকভাবে করা দরকার এবং সহনীয় ওভারহেডের উপর নির্ভর করে আপনি এমন কোনও কিছু নিয়ে পালিয়ে যেতে সক্ষম হতে পারেন

echo {\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}}

যেখানে আপনি প্রতিটি সেটের জন্য {\, ​​{এ..জেড}, {এ..জেড}, {0..9} repeat বিট পুনরাবৃত্তি করবেন - যেমন আপনি যদি প্রতিটি শব্দ সর্বোচ্চ 10 অক্ষর হিসাবে দেখতে চান তবে আপনি এটি 10 ​​বার পুনরাবৃত্তি করুন।

কোডটিতে একটি ঘাটতি রয়েছে (কারণ এটি শুরুতে "কোনও চরিত্র" স্বীকৃতি দেয় না, আমি স্থানধারক হিসাবে "" ব্যবহার করেছি d এটি সদৃশ তৈরি করবে - যেমন "99" এবং "99" poss আপনি সম্ভবত এটিকে একটি সাজানোর মাধ্যমে | ইউনিক ফিল্টার (এবং সম্ভবত টিআরও ব্যবহার করতে পারেন) এর মাধ্যমে এটি থেকে মুক্তি পান তবে আপনার প্রয়োগ এবং চূড়ান্ত আউটপুটটির আকারের উপর নির্ভর করে আপনি তালিকাটি তৈরি করতে যে সময় নেবেন তার সাথে লড়াই করতে পারেন।

একটি তালিকা তৈরি করতে যা ডুপ্লিকেট ছাড়াই সমস্ত অনুমতিগুলি আউটপুট দেয়, তবে আপনার মূল ইনপুটটিতে আপনি আলাদা আলাদা ক্রমে ব্যবহার করতে পারেন

for each in {\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}} ; do  echo $each; done | tr -d " " | sort -u
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.