انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: Fire.Phoenix در 16 اردیبهشت 1395، 07:49 بظ
-
کدی در بش دارم که ۴ خط خروجی میدهد
چگونه می توان هر خط این خروجی را به یک متغیر متفاوت اختصاص دهم
نکته: خط چهارم یک عدد است که قصد دارم در صورت تک رقمی بودن یک صفر قبل از آن اضافه شود
ـــــــــــــــــــ
امکان دارد که به روشی خط خاصی را یک بار اضافه تر پرینت بگیرد یا ترتیب خروج خطوط را تغییر داد
مثلا اگر خروجی
a
b
c
d
باشد مستقیم نتیجه را به این شکل تبدیل کرد
d
a
a
c
b
-
واسه تقسیم خط ها به هر متغیر شاید بتونید از sed استفاده کنید.برای خط چهارم هم از printf استفاده کنید مثل کاری که تو زبان سی انجام میدید.
-
چگونه می توان هر خط این خروجی را به یک متغیر متفاوت اختصاص دهم
چیزی که سریع به ذهن میرسه، استفاده از آرایه هست.
خط چهارم یک عدد است که قصد دارم در صورت تک رقمی بودن یک صفر قبل از آن اضافه شود
اینم که چیز خاص و عجیبی نیست! خرجش یه دستور شرطی هست.
امکان دارد که به روشی خط خاصی را یک بار اضافه تر پرینت بگیرد یا ترتیب خروج خطوط را تغییر داد
بله، بهشرطی که مشخص باشد قرار است دقیقا چه اتفاقی بیفتد!
این سوالتون کمی عجیبه! طبیعتا باید کد رو اینجا بذارید و کاملا توضیح بدید که چه چیزی میخواید تا ما بتونیم در اصلاح کد بهتون کمک کنیم، اما این کار رو نکردید.
-
سعی کنید ایده بگیرید:
[0:~]$echo 5 | sed -E 's/^([[:digit:]]{1})$/0\1/'
05
[0:~]$echo 25 | sed -E 's/^([[:digit:]]{1})$/0\1/'
25
-
اسکریپت است که بخشی از اطلاعات تگ فایل های صوتی را جمع میکند و باید برای مراحل بعدی با الگوی مشخصی در یک فایل متنی ذخیره کند
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
متشکر راهگشا بود
چیزی که سریع به ذهن میرسه، استفاده از آرایه هست.
لینکی برای مطالعه بیشتر سراغ دارید؟
اینم که چیز خاص و عجیبی نیست! خرجش یه دستور شرطی هست.
استفاده از شرط به ذهنم رسید ولی قصد داشتم تا حد امکان کد جمع و جور باشد با توجه به اینکه دقیقا میدانم کدام خط ممکنه این اتفاق برایش رخ دهد
-
برای آرایه اینجا رو مطالعه کنید:
http://mywiki.wooledge.org/BashGuide/Arrays
کد شما اینجوری میشه:
myArray=($(lltag --show-tags number,artist,album,title lalaee.mp3| sed '1d' |cut -d'=' -f2))
باید توجه داشته باشید که آرایه شما از صفر ایندکس میشه، یعنی برای نمونه برای دسترسی به اولین عنصر باید بزنید:
echo ${myArray[0]}
فکر کنم بتونید خودتون کاملش کنید، اگر بازم نیاز به کمک داشتید بگید.
-
متشکر از راهنمایی مشکل حل شد
فقط یک مشکل جزپی اگر در هر خط فاصله داشته باشید خروجی به هم می ریزد (هر خظ یک متغیر نمی شود)
من این مشکل را با تبدیل فاصله به نقطه و برگرداندن به حالت قبل به صورت موقت حل کردم
راه بهتری برای این مشکل وجود دارد؟