তাই ব্যক্তিগত এবং শেখার অভিজ্ঞতার কারণে আমি আবহাওয়ার ডেটা ডেটাবেস করা শুরু করেছি। আমি ডেটা পার্স করতে wgrib2 ব্যবহার করছি এবং মাইএসকিউএল আমদানি করছি। কারণ ডেটা বিভিন্ন ইউনিট - বায়ু "ইউ" এবং "ভি" উপাদানগুলি, ক্যালভিন ইত্যাদি ইত্যাদিতে ফর্ম্যাট করা আছে ... আমাকে এটিকে বায়ুর গতি নট, বায়ু ডিগ্রি ব্যাসার্ধ এবং তাপমাত্রা ডিগ্রি সি ... ইত্যাদিতে রূপান্তর করতে হবে etc.
আমি লুপের জন্য একটি বাশ তৈরি করেছি যা সমস্ত ডেটা মানগুলি লুপ করে, তবে এটি বরং অদক্ষ এবং আমি নিশ্চিত যে এটি করার আরও ভাল উপায় আছে। এটি জঞ্জাল, প্রচুর ... উপর নির্ভর করে এবং প্রায় 1150 স্টেশনের জন্য ডেটা পার্স করতে 15-17 মিনিট সময় নেয়, প্রতিটি স্টেশনে মাইএসকিউএল ডাটাবেসে 160 টি কলাম সহ সমস্ত অভিন্ন কাঠামো রয়েছে table
আমি টি কে (টেম্প ক্যালভিন), আরএইচ (আর্দ্রতা) ইত্যাদির জন্য যে ব্যাশ অ্যারে সেট আপ করেছি ... এর মানগুলি 1000, 975, 950, 925 ... ইত্যাদির জন্য রয়েছে 100 মিলিবার পর্যন্ত।
for thKey in ${!TK[@]}
do
thRH=${RH[$thKey]}
thTK=${TK[$thKey]}
thTC=$(echo -| awk -v tk="$thTK" '{printf "%.1f\n", tk-273.15}')
thWU=${WU[$thKey]}
thWV=${WV[$thKey]}
thTD=$(echo -| awk -v tc="$thTC" -v rh="$thRH" '{printf "%.1f\n", tc-(100-rh)/5}')
thWD=$(echo -| awk -v wu="$thWU" -v wv="$thWV" '{printf "%.0f\n", 57.29578*(atan2(wu, wv))+180}')
thWS=$(echo -| awk -v wu="$thWU" -v wv="$thWV" '{printf "%.1f\n", sqrt(wu*wu+wv*wv)*1.944}')
sed -i '/\/station_id/a <'"$thKey"'T>'"$thTC"'<\/'"$thKey"'T><'"$thKey"'D>'"$thTD"'<\/'"$thKey"'D><'"$thKey"'WD>'"$thWD"'<\/'"$thKey"'WD><'"$thKey"'WS>'"$thWS"'<\/'"$thKey"'WS>' $xmlOut
done
আপনি এটির দ্বারা দেখতে পাচ্ছেন যে স্পষ্ট সমস্যাটি হ'ল এটি প্রায় 1150 * 160 টি কল করতে জাগায় ... সুতরাং সম্ভবত মাস্টার অ্যারেগুলিকে বিশ্রামে পাঠানো হবে এবং লুপ প্রতি একবার মাত্র বিশ্রী জাগিয়ে তোলা হয়েছে (আমি এখন যা করছি তার 1/160 তম!) আরও দক্ষ হবে। তবে আমি এই অনুশীলনের জন্য অ্যাডাব্লিক সিনট্যাক্সটি সঠিকভাবে পেয়েছি বলে মনে হচ্ছে না ...
awk --version
জিএনইউ অ্যাওক 4.1.3, এপিআই: 1.1 (জিএনইউ এমপিএফআর 3.1.4, জিএনইউ এমপি 6.1.0)
এখানে একটি উদাহরণ:
TK=(325,350,231,655)
echo -| awk -v tk="${TK[*]}" '{split(tk,tka,/ /)} { for (i=0; i<=NF; i++) { printf "%.1f\n", tka[i]-273.15 } } '
-273.1 51.9
^ এটি সঠিক নয়। অ্যারের 4 টি মান রয়েছে, এটি কেবল 2 এ ফিরে আসবে না।
echo -| awk -v tk="${TK[*]}" '{split(tk,tka,/ /)} { for (i=0; i<=length(tka); i++) { printf "%.1f\n", tka[i]-273.15 } } '
^ এটি একটি অসীম লুপ তৈরি করে।
কোন ধারনা? কিছু পার্ল শিখতে পারেন এবং এই সমস্ত পার্ল স্ক্রিপ্টে পাস করেন?
C
এবং যদি আপনি নিজের ইনপুট এবং পছন্দসই আউটপুটটি দেখান এবং ব্যাখ্যা করেন তবে একটি ইঙ্গিত দিতে পারতাম। কোনও অ-কার্যক্ষম লাইনের গোলমাল অংশ থেকে আমাকে আপনার উদ্দেশ্যটি অন্তর্নিহিত করার ফলে কোনও ভাল ফলাফল হবে না।