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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: اختصاص هر خط به یک متغیر  (دفعات بازدید: 1860 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین Fire.Phoenix

  • Full Member
  • *
  • ارسال: 108
اختصاص هر خط به یک متغیر
« : 16 اردیبهشت 1395، 07:49 ب‌ظ »
 کدی در بش دارم که ۴ خط خروجی میدهد
چگونه می توان هر خط این خروجی را به یک متغیر متفاوت اختصاص دهم
نکته: خط چهارم یک عدد است که قصد دارم در صورت تک رقمی بودن یک صفر قبل از آن اضافه شود

ـــــــــــــــــــ
امکان دارد که به روشی خط خاصی را یک بار اضافه تر پرینت بگیرد یا ترتیب خروج خطوط را تغییر داد
مثلا اگر خروجی
a
b
c
d
باشد مستقیم نتیجه را به این شکل تبدیل کرد
d
a
a
c
b
« آخرین ویرایش: 16 اردیبهشت 1395، 07:59 ب‌ظ توسط Fire.Phoenix »

آفلاین فاروق

  • Hero Member
  • *
  • ارسال: 992
  • جنسیت : پسر
  • <شعار>این یک شعار است</شعار>
    • تارنمای فاروق
پاسخ : اختصاص هر خط به یک متغیر
« پاسخ #1 : 16 اردیبهشت 1395، 09:07 ب‌ظ »
واسه تقسیم خط ها به هر متغیر شاید بتونید از ‏sed‏ استفاده کنید.برای خط چهارم هم از ‏printf‏ استفاده کنید مثل کاری که تو زبان سی انجام میدید.
http://pcworms.blog.ir
بعد از بررسی پست های قدیمیم، فکر میکنم یک عذرخواهی بدهکارم! معذرت میخوام و اگر اشتباه کردم مستقیم و روشن راهنمایی کنید تا تکرار نکنم.
کانال IRC

آفلاین Geek

  • High Hero Member
  • *
  • ارسال: 1116
  • جنسیت : پسر
  • The answer to life the universe and everything: 42
پاسخ : اختصاص هر خط به یک متغیر
« پاسخ #2 : 16 اردیبهشت 1395، 10:13 ب‌ظ »
نقل‌قول
چگونه می توان هر خط این خروجی را به یک متغیر متفاوت اختصاص دهم

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

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

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

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

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


این سوالتون کمی عجیبه! طبیعتا باید کد رو اینجا بذارید و کاملا توضیح بدید که چه چیزی می‌خواید تا ما بتونیم در اصلاح کد بهتون کمک کنیم، اما این کار رو نکردید.

آفلاین احسان فعالپور

  • Sr. Member
  • *
  • ارسال: 408
  • جنسیت : پسر
پاسخ : اختصاص هر خط به یک متغیر
« پاسخ #3 : 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
عضو ارشد فدراسیون بیکاران ایران FBI

آفلاین Fire.Phoenix

  • Full Member
  • *
  • ارسال: 108
پاسخ : اختصاص هر خط به یک متغیر
« پاسخ #4 : 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
متشکر راهگشا بود
نقل‌قول
چیزی که سریع به ذهن میرسه، استفاده از آرایه هست.
لینکی برای مطالعه بیشتر سراغ دارید؟
نقل‌قول
اینم که چیز خاص و عجیبی نیست! خرجش یه دستور شرطی هست.
استفاده از شرط به ذهنم رسید ولی قصد داشتم تا حد امکان کد جمع و جور باشد با توجه به اینکه دقیقا میدانم کدام خط ممکنه این اتفاق برایش رخ دهد
« آخرین ویرایش: 17 اردیبهشت 1395، 12:22 ق‌ظ توسط Fire.Phoenix »

آفلاین Geek

  • High Hero Member
  • *
  • ارسال: 1116
  • جنسیت : پسر
  • The answer to life the universe and everything: 42
پاسخ : اختصاص هر خط به یک متغیر
« پاسخ #5 : 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

  • Full Member
  • *
  • ارسال: 108
پاسخ : اختصاص هر خط به یک متغیر
« پاسخ #6 : 17 اردیبهشت 1395، 09:01 ب‌ظ »
متشکر از راهنمایی مشکل حل شد
فقط یک مشکل جزپی اگر در هر خط فاصله داشته باشید خروجی به هم می ریزد (هر خظ یک متغیر نمی شود)
من این مشکل را با تبدیل فاصله به نقطه و برگرداندن به حالت قبل به صورت موقت حل کردم
راه بهتری برای این مشکل وجود دارد؟