در قسمت قبل با grep ، cut و tr آشنا شدیم.
آن ابزارها برای کارهای ساده عالی هستند.
اما وقتی بخواهیم:
- شرط روی ستون خاص بگذاریم
- محاسبه انجام دهیم
- متن را ویرایش کنیم
- خروجی را قالببندی کنیم
به ابزارهای قدرتمندتری نیاز داریم:
awksed
این دو ابزار ستون فقرات پردازش متن در لینوکس هستند.
بخش اول — awk
awk برای کار با دادههای ستونی (column-based data) عالی است.
ساختار پایه:
awk 'pattern { action }' file
مثال ساده
نمایش ستون اول فایل /etc/passwd:
awk -F: '{print $1}' /etc/passwd
-F:→ جداکننده:$1→ ستون اول
شرط در awk
نمایش کاربرانی که UID آنها بزرگتر از 1000 است:
awk -F: '$3 > 1000 {print $1, $3}' /etc/passwd
در اینجا:
$3→ UID- اگر بزرگتر از 1000 باشد
- نام کاربر و UID چاپ میشود
این کار با grep بهتنهایی ممکن نیست.
مثال واقعی برای DBA
بررسی استفاده از دیسک و هشدار در صورت بالا بودن:
df -h | awk '$5+0 > 80 {print $1, $5}'
توضیح:
$5ستون درصد استفاده است+0برای تبدیل به عدد- اگر بیشتر از 80% باشد چاپ میشود
این الگو دقیقاً در اسکریپتهای Monitoring استفاده میشود.
محاسبه با awk
فرض کنید بخواهیم مجموع فضای استفادهشده را محاسبه کنیم:
df -h | awk 'NR>1 {sum += $3} END {print sum}'
NR>1→ رد کردن headersum += $3→ جمع کردن ستون سومEND→ بعد از پایان فایل اجرا میشود
بخش دوم — sed
sed برای ویرایش و جایگزینی متن استفاده میشود.
ساختار پایه:
sed 's/old/new/' file
جایگزینی ساده
echo "oracle db" | sed 's/oracle/ORACLE/'
جایگزینی همه موارد در خط
sed 's/error/ERROR/g' file.log
g یعنی تمام matchها در خط.
حذف خطوط خاص
حذف خطوط شامل DEBUG:
sed '/DEBUG/d' file.log
ویرایش مستقیم فایل
⚠ با احتیاط استفاده شود:
sed -i 's/oldvalue/newvalue/' config.conf
-i فایل را مستقیم تغییر میدهد.
در اسکریپتهای production همیشه قبلش backup بگیرید.
مثال واقعی: تمیز کردن log
فرض کنید میخواهیم:
- خطوط DEBUG حذف شوند
- کلمه error بزرگ شود
sed '/DEBUG/d' app.log | sed 's/error/ERROR/g'
ترکیب awk و sed
قدرت واقعی زمانی است که آنها را ترکیب کنیم.
مثلاً:
df -h | awk '$5+0 > 80 {print $1, $5}' | sed 's/%//'
- فایلسیستمهای بالای 80%
- حذف علامت
%
چه زمانی awk و چه زمانی sed؟
| ابزار | کاربرد اصلی |
|---|---|
| awk | پردازش ستونی و محاسبه |
| sed | ویرایش و جایگزینی متن |
اگر با ستون و شرط عددی کار میکنید → awk
اگر جایگزینی یا حذف خط میخواهید → sed
تمرین
- کاربرانی که shell آنها
/bin/bashاست باawkاستخراج کنید. - در یک فایل log تمام IPهای
192.168را باsedحذف کنید. - فایلسیستمهایی که بیشتر از 70% استفاده دارند را چاپ کنید.