পাওয়ারশেল চ্যালেঞ্জ


7

আমাকে এক বন্ধুর দ্বারা চ্যালেঞ্জ জানানো হয়েছে:

"ফাইলের নামগুলির সর্বশেষ অক্ষর দ্বারা ডিরেক্টরি তালিকা অনুসারে বাছাইয়ের দ্রুত এবং সহজতম উপায়টি আবিষ্কার করুন।"

তিনি নিম্নলিখিতটি ব্যবহার করে লিনাক্সে এটি করেছেন:

ls | rev | sort | rev 

আমি তাকে পাওয়ারশেল বিকল্পটি দেখাতে চাই, তবে আমি কেবল পাওয়ারশেল শিখতে শুরু করছি এবং আমি এটি করতে পারি না। সুতরাং, আমি প্রতারণা করছি এবং আপনার সহায়তা চাইছি।


1
আসলে এটি কেবল শেষ চরিত্রটি নয় বরং নিম্নলিখিত সমস্ত অক্ষর অনুসারে বাছাই করছে। নীচে স্যাম কোগানের উত্তরটি শেষ চরিত্রটির দ্বারা কঠোরভাবে দেওয়া হয়েছে এবং নিম্নলিখিত কোনও অক্ষরকে উপেক্ষা করে।
সিম

যে কেউ এই প্রশ্নটি আবার স্থানান্তর করতে ভোট দেওয়ার আগে, এইটি
raven

আমি মনে করি যে এই চ্যালেঞ্জটি বিভ্রান্তিমূলক এবং ততোধিক পাওয়ারশেলের সাথে লিনাক্সের সুষ্ঠু তুলনা নয়। যদি রেভটি শুধুমাত্র শেষ চরিত্রটিকে সাজান তবে তা ন্যায়বিচার হবে। এছাড়াও আরও কি ন্যায়সঙ্গত হতে পারে তা হ'ল লোককে বাশ লিখতে বা যে কোনও কিছুই কেবল শেষ চরিত্রটিকে বাছাই করতে বলা এবং কেবল এটি করা নয়: "এলএস | রেভ | সাজান | এলএস"। তবে সত্যই, কেন কেউ এই অদ্ভুত ফাংশনটি চান তা আমি এখনও আমার মাথার উপরে আঁচড় দিচ্ছি, সম্ভবত চেষ্টা করে কাউকে বোঝানো না যে পাওয়ারশেল শ এর মতো কমপ্যাক্ট হতে পারে তবে কমলাগুলিতে আপেলের তুলনা করে?
উপবৃত্তাকার দর্শন

উত্তর:


3

দুর্ভাগ্যক্রমে পাওয়ারশেলের একটি সহজ সহজ বিপরীত পদ্ধতি নেই, সুতরাং পরিবর্তে আপনাকে স্ট্রিংয়ের শেষ চিঠিটি পেতে হবে এবং এটি অনুসারে বাছাই করতে হবে। এটি আমি এই কাজটি করে একটি উপায়:

dir| sort {$_.name.Substring($_.name.length-1)}

যেমনটি উল্লেখ করা হয়েছে, এটি কেবলমাত্র শেষ অক্ষরের দ্বারা কঠোরভাবে সাজানো হবে, যদিও আমি লিনাক্স সংস্করণটি শেষ এবং তারপরে পরবর্তী বর্ণগুলি অনুসারে বাছাই করব, সুতরাং এটি করার আরও ভাল উপায় হতে পারে, বা আপনাকে কিছু লুপিং প্রবর্তন করতে হতে পারে যদি আপনি এটি যেভাবে চান।


উজ্জ্বল। লিনাক্স বিকল্পের মতো সংক্ষিপ্ত নয়, তবে এখনও বেশ ভাল।
রিচার্ড 10

আমি আরও লক্ষ্য করেছি যে এটি কেবল লিনাক্স সংস্করণের বিপরীতে, শেষ চিঠি অনুসারে সাজানো। তবে চ্যালেঞ্জটি "শেষ চরিত্রের দ্বারা বর্ণিত" তাই এই উত্তরটি প্রশ্নের উত্তর দেয়, যদিও দুটি সমাধান সমান না হয়।
রিচার্ড

কিছু বিভ্রান্তির কারণে এই প্রশ্নটি স্ট্যাক ওভারফ্লোতে স্থানান্তরিত হয়েছিল এবং তারপরে অনাবৃত হয়েছিল। স্ট্যাক ওভারফ্লোতে কিথ হিল সংক্ষিপ্ত উত্তর যুক্ত করলেন ls | সাজান {"$ _" [- 1]}
রিচার্ড


2
dir | sort -Property @{Expression ={$n = $_.Name.ToCharArray(); [Array]::Reverse($n);[String]::Join("",$n)}}

ইউনিক্স সংস্করণটির মতো সংক্ষিপ্ত নয়, বেশিরভাগ কারণেই। নেট ফ্রেমওয়ার্কটিতে স্ট্রিং নেই e রিভার্স () ফাংশন। মূলত এটি সাজান 'ইনপুট আর্গুমেন্টে এই এক্সপ্রেশনটি গণনার মাধ্যমে বাছাই করে' কাজ করে।


এখন, যদি কোনও ইউনিক্স শেল এর চেয়ে ভাল করে

dir | sort -Property Length -Descending

প্রথমে বৃহত্তম ফাইল সহ সমস্ত ফাইল মুদ্রণ করতে আমি এটি দেখতে আগ্রহী।


4
কীভাবে 'এলএস-এস'?
ব্রায়ান

কি দারুন!
এটির

2

আমি নিশ্চিত কেউ এটি আরও ভাল করতে পারে তবে লিনিক্সের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ এমন একটি উপায় এখানে। revআপনার টুলবক্সের জন্য আপনাকে পুনরায় ব্যবহারযোগ্য স্ট্রিং ফাংশনটি রেখে যাওয়ার সুবিধা রয়েছে , এটি সম্পূর্ণ স্ট্রিংটি সাজায় কেবল শেষ চরিত্রটিকে নয়:

function rev ($s) {return -join ($s[$s.Length..0])}

dir | foreach{rev($_.name)} | sort | foreach{rev($_)}

আমি মনে করি ভবিষ্যতগুলি এখানে পাওয়ারসেল পাইপগুলি অ্যারেগুলি কীভাবে কেবল নকশার মতো স্ট্রিং নয় demonst

এটি বুঝতে আমাকে কিছুটা সময় নিয়েছিল যে আমাকে কেবল ২ য় এর মধ্যেই ব্যবহার করতে হবে $_না । সুতরাং আমি অ্যারে সামগ্রীর বিভিন্নতা সম্পর্কে কিছু শিখেছি একটি পাইপ থেকে পরের দিকে।$_.nameforeach

* আমার রেভ ফাংশনটির সাহসের জন্য ক্রেডিট http://rosettacode.org/wiki/Revers_a_string#PowerShell এ যায়


লিনিক্সের মতো কাজ করে:

  • dir | সাজান -প্রপার্টি @; এক্সপ্রেশন = {$ n = $ _ নাম TToCharArray (); [এরে] :: বিপরীত ($ ঢ); [স্ট্রিং] :: যোগদান ( "", $ ঢ)}}

লিনিক্সের মতো কাজের সাজান, তবে খুব, খুব ধীর:

  • ls -n | সাজান {$ _ [3e3..0]}

লিনিক্সের মতো কাজ করবেন না, অর্থাত্ ফাইলের নামের সমস্ত অক্ষর বাছাই করতে ব্যর্থ হন; (শুধুমাত্র স্ট্রিংয়ের শেষ চরিত্রটি সাজান):

  • Dir | সাজান {$ .name.Substring ($ .name.leth-1)}
  • Dir | সাজান {$ _। নাম [-1]}
  • ম | সাজানোর {। $: _ নাম [-1]}
  • ম | সাজানোর { "$: _" [- 1]}
  • ls -n | সাজান {$ _ [- 1]}

রেভ ফাংশনটি একটি অ্যারে গ্রহণ করে এটি উন্নত হতে পারে। তারপরে আপনি কোডটির জন্য প্রত্যেকটি অপসারণ করতে পারেন, কারণ ফাংশনটি এটি কল করবে। ls | rev | sort | revসম্পূর্ণ নিজেরটিকে বৈধ করতে আপনি কয়েকটি জিনিস যুক্ত করতে পারেন । :-)
কোরি নটসন

1

শায়ের ভেরিয়েন্টটি স্ট্রিংয়ের সাথে ইনডেক্স করে স্বীকৃত উত্তরের চেয়ে কম ছোট তবে এটিও উন্নত করা যায়। আপনি এটি অপ্রয়োজনীয় স্থানগুলি বাদ দিয়ে এবং একটি সংক্ষিপ্ত নাম ব্যবহার করে আরও ছোট করতে পারেন:

ls|sort{$_.Name[-1]}

এছাড়াও আপনি (সংক্ষেপে) -Nameযুক্তিটি এখানে ব্যবহার করতে পারেন Get-ChildItem:

ls -n|sort{$_[-1]}

যা সরাসরি স্ট্রিংগুলি ফিরিয়ে দেবে।

যদি আপনি সত্যিই বিপরীত স্ট্রিং অনুসারে বাছাই করতে চান তবে নীচেরগুলি কাজ করে (তবে ধীর হয়):

ls -n|sort{$_[3e3..0]}

আপনি যদি ফাইলের নামের দৈর্ঘ্যের উপরের আবদ্ধ থাকে তবে আপনি এটি দ্রুত তৈরি করতে পারেন।


প্রশ্নটি থেকে উদ্ধৃত: »ফাইলের নামগুলির সর্বশেষ অক্ষর দ্বারা ডিরেক্টরি তালিকা বাছাইয়ের দ্রুততম এবং সহজতম উপায়টি আবিষ্কার করুন« « এটি কেবল শেষ চরিত্র অনুসারে বাছাই করা দরকার। যদি এটির সর্বাধিক সহজ উপায়টি স্ট্রিংটিকে বিপরীত করে তোলে, তাই হও, তবে যদি এটি করার সহজতম উপায়টি কেবলমাত্র শেষ চরিত্র অনুসারে বাছাই করা হয়, তবে এটি কাজটিও ঠিক সমাধান করে। প্রশ্নটি ছিল না Power আমি কীভাবে ইউনিক্স শেলের এই স্নিপেটটি পাওয়ারশেলের সাথে একইভাবে করতে পারি? «।
জোয়

দুঃখিত। আমি এটা ভুল বুঝতে পেরেছি.
উপবৃত্তাকার দর্শন 16

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.