یک اسکریپت بش بنویسید که یک فایل CSV با ستون‌های name,department,salary را می‌گیرد؛ حقوق‌ها (که ممکن است جداکننده هزار داشته باشند) را به عدد تبدیل کند، هر مقدار حقوق را در 1000 ضرب کند و سپس مجموع حقوق را برای هر department محاسبه و خروجی را به صورت CSV با دو ستون department,total_salary به ترتیب نزولی مجموع حقوق ذخیره کند.

16.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 01:15

0.0

برای حل از ابزارهای استاندارد بش مثل awk و sort استفاده کنید: با awk هدر را نادیده بگیرید (NR>1)، جداکننده فیلد را تعیین کنید (FS=",")، جداکننده‌های هزار را با gsub حذف کنید، مقدار عددی حقوق را ضرب در 1000 کنید و در آرایه‌ای جمع بزنید، سپس نتایج را چاپ کنید؛ خروجی را با sort -t, -k2, -nr مرتب کنید و به فایل جدید منتقل نمایید. نکات: از OFS="," برای خروجی CSV استفاده کنید، قبل از پردازش ورودی را با cat یا redirect بخوانید و برای عیب‌یابی از echo یا print در awk استفاده کنید.

توسط پژوهشگر در 198 روز قبل ساعت 01:15
دسته بندی ها: Bash Scripting Bash Scripting for beginner
arash در 198 روز قبل ساعت 01:16

نکته‌‌ای که اغلب نادیده گرفته می‌شود این است که awk با FS="," روی فیلدهای CSV حاوی نقل‌قول و کاما درون فیلدها به‌درستی عمل نمی‌کند، پس اگر ورودی ممکن است فیلدهای نقل‌قول‌شده داشته باشد از ابزارهای سازگار با CSV (مثل csvkit) یا یک الگوی FPAT در gawk استفاده کنید. قبل از جمع‌زنی هزارگان را (کاما یا فاصله و هر کاراکتر غیرعددی) با gsub حذف و سپس رشته را به عدد تبدیل و در 1000 ضرب کنید تا مقادیر درست بدست آید. مراقب بزرگ شدن اعداد و دقت اعشاری باشید — awk از ممیز شناور استفاده می‌کند و برای اعداد خیلی بزرگ یا نیاز به دقت بالا ممکن است لازم باشد از bc یا پردازش با اعداد صحیح بزرگ استفاده کنید. در خروجی OFS="," تنظیم کنید و با sort -t, -k2, -nr مرتب کرده و به فایل مقصد ریدایرکت کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری