আমি এখানে কোন উত্তর ব্যবহার করতে পারি না। কোনও জেকিউ, কোনও শেল অ্যারে, কোনও ডিক্লেয়ার, কোনও গ্রেপ -পি, কোনও লুকহাইন্ড এবং লুকহ্যাড, কোনও পাইথন, কোনও পার্ল, কোনও রুবি, না - এমনকি বাশও নেই ... বাকী উত্তরগুলি কেবল ভাল কাজ করে না। জাভাস্ক্রিপ্টটি পরিচিত মনে হয়েছিল, তবে টিনটি নেসক্যাফে বলেছে - তাই এটিও কোনও অগ্রগতি নয় :) এমনকি যদি সহজ পাওয়া যায় তবে আমার সাধারণ প্রয়োজনের জন্য - এগুলি ওভারকিল এবং ধীর গতির হবে।
তবুও, আমার মডেমের জসন ফর্ম্যাট উত্তর থেকে আমার পক্ষে অনেকগুলি পরিবর্তনশীল পাওয়া অত্যন্ত গুরুত্বপূর্ণ। আমি আমার রাউটারগুলিতে খুব ছাঁটাই ব্যাসিবক্সের সাথে এটি করছি! একা অজানা ব্যবহার করে কোনও সমস্যা নেই: কেবল ডিলিমিটার সেট করুন এবং ডেটা পড়ুন। একক ভেরিয়েবলের জন্য, এটাই!
awk 'BEGIN { FS="\""; RS="," }; { if ($2 == "login") {print $4} }' test.json
মনে আছে আমার কোন অ্যারে নেই? শেল স্ক্রিপ্টে আমার যে 11 টি ভেরিয়েবলের দরকার তা আমাকে বিশদভাবে পার্সড ডেটাতে নির্ধারণ করতে হয়েছিল। আমি যেখানেই তাকালাম, বলা হয়েছিল এটি একটি অসম্ভব মিশন। এটি নিয়েও কোনও সমস্যা নেই।
আমার সমাধান সহজ। এই কোডটি করবে: ১) প্রশ্ন থেকে জেএসন ফাইলটি বিশ্লেষণ করবে (আসলে, আমি সর্বাধিক উত্সাহিত উত্তর থেকে একটি ওয়ার্কিং ডেটা নমুনা ধার নিয়েছি) এবং উদ্ধৃত ডেটা বেছে নেব, আরও ২) মুক্ত নামকরণ করা শেলকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে কিছু কিছু দেবে পরিবর্তনশীল নাম।
eval $( curl -s 'https://api.github.com/users/lambda' |
awk ' BEGIN { FS="\""; RS="," };
{
if ($2 == "login") { print "Login=\""$4"\"" }
if ($2 == "name") { print "Name=\""$4"\"" }
if ($2 == "updated_at") { print "Updated=\""$4"\"" }
}' )
echo "$Login, $Name, $Updated"
ভিতরে ফাঁকা নিয়ে কোনও সমস্যা নেই। আমার ব্যবহারে, একই কমান্ডটি দীর্ঘ একক লাইন আউটপুটকে বিশ্লেষণ করে। যেমন eval ব্যবহৃত হয়, এই সমাধানটি কেবল বিশ্বস্ত ডেটার জন্য উপযুক্ত। এটি অবিন্যস্ত ডেটা পিকআপের সাথে মানিয়ে নেওয়া সহজ। বিপুল সংখ্যক ভেরিয়েবলের জন্য, যদি অন্যটি ব্যবহার করে প্রান্তিক গতি লাভ করা যায়। অ্যারের অভাবের স্পষ্টতই অর্থ: অতিরিক্ত ফিডিং ছাড়া একাধিক রেকর্ড নেই। তবে যেখানে অ্যারে উপলব্ধ রয়েছে, এই সমাধানটি মানিয়ে নেওয়া একটি সহজ কাজ।
@ মাইকেল সেড উত্তর প্রায় কাজ করে (তবে আমি এটিতে কোনও মন্তব্য করতে পারি না)। আমার সুন্দর বিন্যাসিত ডেটার জন্য - এটি কাজ করে। এখানে ব্যবহৃত উদাহরণের সাথে এতটা নয় (অনুপস্থিত উদ্ধৃতিগুলি এটি ফেলে দেয়)) এটি জটিল এবং সংশোধন করা কঠিন। এছাড়াও 11 টি ভেরিয়েবলগুলি বের করতে 11 টি কল করা আমি পছন্দ করি না। কেন? আমি 9 টি ভেরিয়েবলগুলি বের করার 100 টি লুপ টাইম করেছি: সেড ফাংশনটি 48.99 সেকেন্ড নিয়েছে এবং আমার সমাধানটি 0.91 সেকেন্ড নিয়েছে! এটা ঠিক না? 9 টি ভেরিয়েবলের কেবল একটি একক নিষ্কাশন করছেন: 0.51 বনাম 0.02 সেকেন্ড।