انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: Fire.Phoenix در 16 اردیبهشت 1395، 07:49 ب‌ظ

عنوان: اختصاص هر خط به یک متغیر
ارسال شده توسط: Fire.Phoenix در 16 اردیبهشت 1395، 07:49 ب‌ظ
 کدی در بش دارم که ۴ خط خروجی میدهد
چگونه می توان هر خط این خروجی را به یک متغیر متفاوت اختصاص دهم
نکته: خط چهارم یک عدد است که قصد دارم در صورت تک رقمی بودن یک صفر قبل از آن اضافه شود

ـــــــــــــــــــ
امکان دارد که به روشی خط خاصی را یک بار اضافه تر پرینت بگیرد یا ترتیب خروج خطوط را تغییر داد
مثلا اگر خروجی
a
b
c
d
باشد مستقیم نتیجه را به این شکل تبدیل کرد
d
a
a
c
b
عنوان: پاسخ : اختصاص هر خط به یک متغیر
ارسال شده توسط: فاروق در 16 اردیبهشت 1395، 09:07 ب‌ظ
واسه تقسیم خط ها به هر متغیر شاید بتونید از ‏sed‏ استفاده کنید.برای خط چهارم هم از ‏printf‏ استفاده کنید مثل کاری که تو زبان سی انجام میدید.
عنوان: پاسخ : اختصاص هر خط به یک متغیر
ارسال شده توسط: Geek در 16 اردیبهشت 1395، 10:13 ب‌ظ
نقل‌قول
چگونه می توان هر خط این خروجی را به یک متغیر متفاوت اختصاص دهم

چیزی که سریع به ذهن میرسه، استفاده از آرایه هست.

نقل‌قول
خط چهارم یک عدد است که قصد دارم در صورت تک رقمی بودن یک صفر قبل از آن اضافه شود

اینم که چیز خاص و عجیبی نیست! خرجش یه دستور شرطی هست.

نقل‌قول
امکان دارد که به روشی خط خاصی را یک بار اضافه تر پرینت بگیرد یا ترتیب خروج خطوط را تغییر داد

بله، به‌شرطی که مشخص باشد قرار است دقیقا چه اتفاقی بیفتد!


این سوالتون کمی عجیبه! طبیعتا باید کد رو اینجا بذارید و کاملا توضیح بدید که چه چیزی می‌خواید تا ما بتونیم در اصلاح کد بهتون کمک کنیم، اما این کار رو نکردید.
عنوان: پاسخ : اختصاص هر خط به یک متغیر
ارسال شده توسط: احسان فعالپور در 16 اردیبهشت 1395، 11:16 ب‌ظ
سعی کنید ایده بگیرید:
[0:~]$echo 5 | sed -E 's/^([[:digit:]]{1})$/0\1/'
05
[0:~]$echo 25 | sed -E 's/^([[:digit:]]{1})$/0\1/'
25
عنوان: پاسخ : اختصاص هر خط به یک متغیر
ارسال شده توسط: Fire.Phoenix در 17 اردیبهشت 1395، 12:13 ق‌ظ
اسکریپت است که بخشی از اطلاعات تگ فایل های صوتی را جمع میکند و باید برای مراحل بعدی با الگوی مشخصی در یک فایل متنی ذخیره کند
lltag --show-tags number,artist,album,title filename.mp3 | sed '1d' |cut -d'=' -f2 کد بالا اطلاعات مورد نیاز را به خط به خط نشان میدهد
در ابتدا قصد داشتم به هر خط یک متغیر اختصاص دهم و بعد با دستور echo اطلاعات را به شکلی که قصد دارم در یک فایل متنی ذخیره کنم
روشی که به نظرم سریعتر و بهینه تر است
جابجایی خط های خروجی دستور بالا و در نهایت پایپ کردن خروجی به دستور
tr '\n' ' − ' بود
که در نهایت اطلاعات به شکل زیر ذخیره شود
number − artist − artist − album − title
سعی کنید ایده بگیرید:
[0:~]$echo 5 | sed -E 's/^([[:digit:]]{1})$/0\1/'
05
[0:~]$echo 25 | sed -E 's/^([[:digit:]]{1})$/0\1/'
25
متشکر راهگشا بود
نقل‌قول
چیزی که سریع به ذهن میرسه، استفاده از آرایه هست.
لینکی برای مطالعه بیشتر سراغ دارید؟
نقل‌قول
اینم که چیز خاص و عجیبی نیست! خرجش یه دستور شرطی هست.
استفاده از شرط به ذهنم رسید ولی قصد داشتم تا حد امکان کد جمع و جور باشد با توجه به اینکه دقیقا میدانم کدام خط ممکنه این اتفاق برایش رخ دهد
عنوان: پاسخ : اختصاص هر خط به یک متغیر
ارسال شده توسط: Geek در 17 اردیبهشت 1395، 03:19 ب‌ظ
برای آرایه اینجا رو مطالعه کنید:
http://mywiki.wooledge.org/BashGuide/Arrays

کد شما اینجوری میشه:

myArray=($(lltag --show-tags number,artist,album,title lalaee.mp3| sed '1d' |cut -d'=' -f2))
باید توجه داشته باشید که آرایه شما از صفر ایندکس میشه، یعنی برای نمونه برای دسترسی به اولین عنصر باید بزنید:

echo ${myArray[0]}
فکر کنم بتونید خودتون کاملش کنید، اگر بازم نیاز به کمک داشتید بگید.
عنوان: پاسخ : اختصاص هر خط به یک متغیر
ارسال شده توسط: Fire.Phoenix در 17 اردیبهشت 1395، 09:01 ب‌ظ
متشکر از راهنمایی مشکل حل شد
فقط یک مشکل جزپی اگر در هر خط فاصله داشته باشید خروجی به هم می ریزد (هر خظ یک متغیر نمی شود)
من این مشکل را با تبدیل فاصله به نقطه و برگرداندن به حالت قبل به صورت موقت حل کردم
راه بهتری برای این مشکل وجود دارد؟