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

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

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




نویسنده موضوع: اضافه کردن یک رشته به آخر هرخط  (دفعات بازدید: 715 بار)

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

آفلاین A. Rahmati

  • Full Member
  • *
  • ارسال: 113
  • جنسیت : پسر
اضافه کردن یک رشته به آخر هرخط
« : 29 امرداد 1398، 08:20 ق‌ظ »
سلام.
من یک فایل دارم که می‌خواهم در آخر هر خط یک چیزی اضافه کنم ولی هرکاری می‌کنم درست نمی‌شود.
فایل من یک چیزی شبیه این است:
2019-08-18,11151.00,11152.00,11000.00,11150.00,744010185979,66725892,8241,10621.00,11152.00
2019-08-17,10650.00,10798.00,10513.00,10621.00,78634255426,7403725,1592,10694.00,10555.00
2019-08-14,10623.00,10975.00,10530.00,10694.00,116415972310,10885882,2045,10466.00,10600.00
2019-08-13,10500.00,10580.00,10430.00,10466.00,105355881829,10066487,1838,10424.00,10437.00
2019-08-11,10350.00,10530.00,10333.00,10424.00,70038113613,6719143,1490,10475.00,10411.00
2019-08-10,10600.00,10605.00,10400.00,10475.00,62335512386,5950765,1344,10547.00,10437.00
2019-08-07,10850.00,10899.00,10480.00,10547.00,105964838413,10047181,1995,10844.00,10620.00
2019-08-06,11080.00,11100.00,10788.00,10844.00,89061382148,8213109,1963,11157.00,10800.00
2019-08-05,11390.00,11390.00,11060.00,11157.00,77539332486,6950123,1360,11201.00,11070.00

با استفاده از این دستور: sed -e 's/$/,1398/' myfile این شکلی شد:
,139808-18,11151.00,11152.00,11000.00,11150.00,744010185979,66725892,8241,10621.00,11152.00
,139808-17,10650.00,10798.00,10513.00,10621.00,78634255426,7403725,1592,10694.00,10555.00
,139808-14,10623.00,10975.00,10530.00,10694.00,116415972310,10885882,2045,10466.00,10600.00
,139808-13,10500.00,10580.00,10430.00,10466.00,105355881829,10066487,1838,10424.00,10437.00
,139808-11,10350.00,10530.00,10333.00,10424.00,70038113613,6719143,1490,10475.00,10411.00
,139808-10,10600.00,10605.00,10400.00,10475.00,62335512386,5950765,1344,10547.00,10437.00
,139808-07,10850.00,10899.00,10480.00,10547.00,105964838413,10047181,1995,10844.00,10620.00
,139808-06,11080.00,11100.00,10788.00,10844.00,89061382148,8213109,1963,11157.00,10800.00
,139808-05,11390.00,11390.00,11060.00,11157.00,77539332486,6950123,1360,11201.00,11070.00

از یک حلقه‌ی for هم استفاده کردم:
for i in `cat ./myfile`; do
echo $i,1398
done
بازهم همان شد:
bash -x sc.sh
++ cat ./myfile
+ for i in `cat ./myfile`
+ echo $'2019-08-18,11151.00,11152.00,11000.00,11150.00,744010185979,66725892,8241,10621.00,11152.00\r,1398'
,139808-18,11151.00,11152.00,11000.00,11150.00,744010185979,66725892,8241,10621.00,11152.00
+ for i in `cat ./myfile`
+ echo $'2019-08-17,10650.00,10798.00,10513.00,10621.00,78634255426,7403725,1592,10694.00,10555.00\r,1398'
,139808-17,10650.00,10798.00,10513.00,10621.00,78634255426,7403725,1592,10694.00,10555.00
+ for i in `cat ./myfile`
+ echo $'2019-08-14,10623.00,10975.00,10530.00,10694.00,116415972310,10885882,2045,10466.00,10600.00\r,1398'
,139808-14,10623.00,10975.00,10530.00,10694.00,116415972310,10885882,2045,10466.00,10600.00
+ for i in `cat ./myfile`
+ echo $'2019-08-13,10500.00,10580.00,10430.00,10466.00,105355881829,10066487,1838,10424.00,10437.00\r,1398'
,139808-13,10500.00,10580.00,10430.00,10466.00,105355881829,10066487,1838,10424.00,10437.00
+ for i in `cat ./myfile`
+ echo $'2019-08-11,10350.00,10530.00,10333.00,10424.00,70038113613,6719143,1490,10475.00,10411.00\r,1398'
,139808-11,10350.00,10530.00,10333.00,10424.00,70038113613,6719143,1490,10475.00,10411.00
+ for i in `cat ./myfile`
+ echo $'2019-08-10,10600.00,10605.00,10400.00,10475.00,62335512386,5950765,1344,10547.00,10437.00\r,1398'
,139808-10,10600.00,10605.00,10400.00,10475.00,62335512386,5950765,1344,10547.00,10437.00
+ for i in `cat ./myfile`
+ echo $'2019-08-07,10850.00,10899.00,10480.00,10547.00,105964838413,10047181,1995,10844.00,10620.00\r,1398'
,139808-07,10850.00,10899.00,10480.00,10547.00,105964838413,10047181,1995,10844.00,10620.00
+ for i in `cat ./myfile`
+ echo $'2019-08-06,11080.00,11100.00,10788.00,10844.00,89061382148,8213109,1963,11157.00,10800.00\r,1398'
,139808-06,11080.00,11100.00,10788.00,10844.00,89061382148,8213109,1963,11157.00,10800.00
+ for i in `cat ./myfile`
+ echo $'2019-08-05,11390.00,11390.00,11060.00,11157.00,77539332486,6950123,1360,11201.00,11070.00\r,1398'
,139808-05,11390.00,11390.00,11060.00,11157.00,77539332486,6950123,1360,11201.00,11070.00
فکر می‌کنم مشکل از آن علامت r\ باشد -در همین کادر بالا. کسی می‌داند باید چکارش کنم؟
Ubuntu Gnome 20.04 LTS

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
پاسخ : اضافه کردن یک رشته به آخر هرخط
« پاسخ #1 : 29 امرداد 1398، 12:31 ب‌ظ »
اول این بسته رو نصب کنید:

sudo apt install dos2unix
بعد این دستور رو اجرا کنید:

dos2unix  myfile
و نهایتا با دستور sed خودتون مجدد امتحان کنید.

مشکل باید حل شده باشه.
..I feel no fault for the fault I feel..

آفلاین A. Rahmati

  • Full Member
  • *
  • ارسال: 113
  • جنسیت : پسر
پاسخ : اضافه کردن یک رشته به آخر هرخط
« پاسخ #2 : 29 امرداد 1398، 02:39 ب‌ظ »
درست شد.
متشکرم میلاد. داشت روی اعصابم می‌رفت.
Ubuntu Gnome 20.04 LTS

آفلاین esmaeelE

  • ناظر انجمن
  • *
  • ارسال: 1251
  • جنسیت : پسر
پاسخ : اضافه کردن یک رشته به آخر هرخط
« پاسخ #3 : 29 امرداد 1398، 09:41 ب‌ظ »
این مثالو من اجرا کردم فکر کنم  sed با i- استفاده بشه بهتره
sed -e 's/$/,1398/' myfile
اینطوری
sed -i 's/$/,1398/' myfile
تا تغییرات روی همون فایل اعمال بشن.

نکته استفاده از دستور dos2unix
این لینک https://www.shellscript.sh/tips/dos2unix/

توضیح داده که در ویندوز برای پایان خط از ترکیب دو کاراکتر r/n/ و در لینوکس فقط از  n/
برای پایان خط استفاده می‌شه دستوری که آقا میلاد معرفی کردن همین تبدیلو انجام میده.

به نظر می‌رسه فایل اصلی از یه سیستم ویندوزی اومده باشه که نیاز به اینکار هست.

اگه روی فایل اصلی این دستور اجرا کنین نشون میده که پایان بندی هر خط توی فایل چیه
hexdump -c file.txt
مثلا برای من
0000350   ,   1   1   0   7   0   .   0   0   ,   1   3   9   8  \n   ,
0000360   1   3   9   8  \n

که نشون می ده پایان هر خط فایل  n\ هست.

نکته ای که تو این چند روز دو بار باهاش برخورد داشتم گفتم اینجا که کمی مربوطه مطرح بشه بد نیست.
و اینکه یک سوال دیگه در همین مورد تو انجمن داشتیم که لینکشو پیدا نکردم.


لینک پاسخ در استک https://stackoverflow.com/a/1552782

ویرایش

لینک موضوع مرتبط در انجمن

« آخرین ویرایش: 03 بهمن 1398، 02:15 ق‌ظ توسط esmaeelE »

آفلاین A. Rahmati

  • Full Member
  • *
  • ارسال: 113
  • جنسیت : پسر
پاسخ : اضافه کردن یک رشته به آخر هرخط
« پاسخ #4 : 31 امرداد 1398، 08:01 ق‌ظ »
لینکی که فرستادی را خواندم و فکر می‌کنم فهمیدم چه اتفاقی دارد می‌افتد.
آن فایل را از یک سایت دانلود کردم که به احتمال زیاد با سیستم ویندوزی کار می‌کرده.
متشکرم اسمائیل.
Ubuntu Gnome 20.04 LTS