انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: Nelson در 07 آذر 1391، 09:24 بظ
-
میخوام از تغییرات یکسری فایل با پسوند مشخص در یه دایرکتوری یک گزارش درست کنم. حجم این فایلها در طول روز تغییر میکنه و میخوام یه لیست بسازم که اسم فایل + حجمش در اول روز + حجمش در آخر روز رو داشته باشه
(دو تا اسکریپت که در کرون تب اجرا میشن)
خودم یه راه حل نصفه و نیمه دارم :
ls -alh *.tar.gz | awk 'BEGIN {OFS = "..."} {print $9,$5} END {print "---Done---"}'
که خروجی میشه چیزی شبیه این:
file1.tar.gz...169M
file2.tar.gz...193M
file3.tar.gz...88M
file4.tar.gz...158M
---Done---
حالا نمیدونم چطور حجم فایلها رو که آخر روز بدست میارم به انتهای هر خط اضافه کنم که این شکلی بشه :
file1.tar.gz...169M...180M
file2.tar.gz...193M...220M
file3.tar.gz...88M...110M
file4.tar.gz...158M...175M
---Done---
خودم فکر کردم شاید بشه دوتا فایل درست کنم مثل خروجی اول بعد ستون دوم فایل دوم که حجم فایلها در آخر روزه رو با کات جدا کنم و به فایل اول اضافه کنم!! ولی احتمالا راه های بهتری هم هست. و یک مسئله دیگه هم اینه که ممکنه یه فایل جدید درست شده باشه که در ابتدای روز نبوده و اون هم باید توی لیست بیاد
ممنون میشم اگه نظری داشتید بگید
-
فکر کنم با دستور join بشه.
برا دستور join تو دو فایلی که میخاین جدولاشو کنار هم بزارین باید یک جدول تو دو تا فایل یکی باشه که این جا اسامی فایلا برا شما یکی هست.
این جا برا oin گفته :
http://www.albany.edu/~ig4895/join.htm
http://linux.101hacks.com/linux-commands/join-command-examples/
این جام گفته که با دستور sed چه جوری یک چیزی رو به اخر یک خط اپند کنین
http://stackoverflow.com/questions/2516343/add-at-the-end-of-the-line-with-sed
-
ممنون که وقت گذاشتی با join درست شد. با کمی تغییرات
ls -alh *.tar.gz | awk 'BEGIN {OFS = " == "} {print $9,$5} END {print "---Done---"}' > report۱
file1.tar.gz == 169M
file2.tar.gz == 193M
file3.tar.gz == 88M
file4.tar.gz == 158M
---Done---
ls -alh *.tar.gz | awk 'BEGIN {OFS = " --> "} {print $9,$5} END {print "---Done---"}' > report2
file1.tar.gz --> 180M
file2.tar.gz --> 293M
file3.tar.gz --> 150M
file4.tar.gz --> 170M
file5.tar.gz --> 106M
file6.tar.gz --> 24M
file7.tar.gz --> 34M
---Done---
با a2 تمام سطر های فایل دوم رو اضافه میکنیم تا اگه فایل جدیدی بود نشون بده
join -a2 report1 report2 > report
file1.tar.gz == 169M --> 180M
file2.tar.gz == 193M --> 293M
file3.tar.gz == 113M --> 150M
file4.tar.gz == 158M --> 170M
file5.tar.gz == 96M --> 106M
file6.tar.gz --> 24M
file7.tar.gz --> 34M
---Done---
بازم ممنون :)