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

کمک و پشتیبانی => انجمن عمومی => نویسنده: A. Rahmati در 29 امرداد 1398، 08:20 ق‌ظ

عنوان: اضافه کردن یک رشته به آخر هرخط
ارسال شده توسط: A. Rahmati در 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\ باشد -در همین کادر بالا. کسی می‌داند باید چکارش کنم؟
عنوان: پاسخ : اضافه کردن یک رشته به آخر هرخط
ارسال شده توسط: M!lad در 29 امرداد 1398، 12:31 ب‌ظ
اول این بسته رو نصب کنید:

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

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

مشکل باید حل شده باشه.
عنوان: پاسخ : اضافه کردن یک رشته به آخر هرخط
ارسال شده توسط: A. Rahmati در 29 امرداد 1398، 02:39 ب‌ظ
درست شد.
متشکرم میلاد. داشت روی اعصابم می‌رفت.
عنوان: پاسخ : اضافه کردن یک رشته به آخر هرخط
ارسال شده توسط: esmaeelE در 29 امرداد 1398، 09:41 ب‌ظ
این مثالو من اجرا کردم فکر کنم  sed با i- استفاده بشه بهتره
sed -e 's/$/,1398/' myfile
اینطوری
sed -i 's/$/,1398/' myfile
تا تغییرات روی همون فایل اعمال بشن.

نکته استفاده از دستور dos2unix
این لینک https://www.shellscript.sh/tips/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 (https://stackoverflow.com/a/1552782)

ویرایش

لینک موضوع مرتبط در انجمن
https://forum.ubuntu-ir.org/index.php?topic=148872.msg1160943#msg1160943 (https://forum.ubuntu-ir.org/index.php?topic=148872.msg1160943#msg1160943)

عنوان: پاسخ : اضافه کردن یک رشته به آخر هرخط
ارسال شده توسط: A. Rahmati در 31 امرداد 1398، 08:01 ق‌ظ
لینکی که فرستادی را خواندم و فکر می‌کنم فهمیدم چه اتفاقی دارد می‌افتد.
آن فایل را از یک سایت دانلود کردم که به احتمال زیاد با سیستم ویندوزی کار می‌کرده.
متشکرم اسمائیل.