وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

چگونه یک فایل از رشته ها را با Awk تقسیم کنیم

0 1
زمان لازم برای مطالعه: 4 دقیقه


دستور awk لینوکس (مختص شده از نام توسعه دهندگان؛ Aho، Weinberger و Kernighan) یک راه عالی برای process و فایلی از رشته ها را تجزیه و تحلیل کنید. برای اینکه فایل ها آموزنده تر باشند، باید به صورت ردیف و ستون سازماندهی شوند. سپس، می توانید از awk استفاده کنید روی این فایل ها به:

  • فایل ها را خط به خط اسکن کنید.
  • هر خط را به فیلدها/ستون ها تقسیم کنید.
  • الگوها را مشخص کنید و خطوط فایل را با آن الگوها مقایسه کنید
  • اقدامات مختلف را انجام دهید روی خطوطی که با یک الگوی داده شده مطابقت دارند

در این مقاله، کاربرد اصلی دستور awk و روش استفاده از آن برای تقسیم یک فایل از رشته ها را توضیح خواهیم داد. ما نمونه های این مقاله را اجرا کرده ایم روی یک سیستم Debian 10 Buster اما می توان آنها را به راحتی تکرار کرد روی اکثر توزیع های لینوکس

فایل نمونه ای که از آن استفاده خواهیم کرد

فایل نمونه رشته هایی که برای نشان دادن استفاده از دستور awk استفاده خواهیم کرد به شرح زیر است:

چگونه یک فایل از رشته ها را با Awk تقسیم کنیم

این چیزی است که هر ستون از فایل نمونه نشان می دهد:

  • ستون اول شامل نام کارکنان / معلمان یک مدرسه است
  • ستون دوم شامل موضوعی است که کارمند آموزش می دهد
  • ستون سوم نشان می دهد که کارمند استاد یا استادیار است
  • ستون چهارم شامل حقوق کارمند است

مثال 1: از Awk برای استفاده کنید print تمام خطوط یک فایل

چاپ هر خط از یک فایل مشخص شده رفتار پیش فرض دستور awk است. در دستور زیر در دستور awk، ما هیچ الگوی را مشخص نمی کنیم که awk باید باشد print، بنابراین دستور قرار است که “print” عمل به تمام خطوط فایل.

پیشنهاد می‌کنیم بخوانید:  راهنمای سفارشی سازی ترمینال لینوکس برای مبتدیان

نحو:

$ بیخیال ‘{print}’ filename.txt

مثال:

در این مثال، من دستور awk را به print محتویات فایل نمونه من، خط به خط.

$ بیخیال ‘{print}’ sample_file.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

مثال 2: از awk to استفاده کنید print فقط خطوطی که با یک الگوی داده شده مطابقت دارند

با awk، می توانید یک الگو را مشخص کنید و دستور خواهد شد print فقط خطوط مطابق با آن الگو.

نحو:

$ بیخیال ‘/pattern_to_be_matched/ {print}’ filename.txt

مثال:

از فایل نمونه اگر بخواهم print فقط خط(هایی) که حاوی متغیر ‘B’ هستند، می توانم از دستور زیر استفاده کنم:

$ بیخیال ‘/B/ {print}’ sample_file.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

برای معنادارتر شدن مثال، اجازه دهید print فقط اطلاعات مربوط به کارمندانی که “پروفسور” هستند.

$ بیخیال ‘/استاد/ {print}’ sample_file.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

این دستور فقط خطوط/مدخل هایی را چاپ می کند که حاوی رشته “professor” هستند، بنابراین اطلاعات ارزشمندتری که از داده ها مشتق شده است داریم.

مثال 3. از awk برای تقسیم فایل استفاده کنید تا فقط فیلدها/ستون های خاص چاپ شوند.

به جای پرینت کل فایل، می توانید awk را در آن ایجاد کنید print فقط ستون های خاصی از فایل Awk همه کلمات را که با فاصله سفید از هم جدا شده اند، در یک خط به عنوان رکورد ستونی به طور پیش فرض در نظر می گیرد. رکورد را در یک متغیر $N ذخیره می کند. جایی که $1 نشان دهنده اولین کلمه، $2 ذخیره کلمه دوم، $3 چهارم، و غیره روی. $0 کل خط را ذخیره می کند تا خط who چاپ شود، همانطور که در مثال 1 توضیح داده شد.

نحو:

$ بیخیال ‘{print $N،….}’ filename.txt

مثال:

دستور زیر خواهد بود print فقط ستون اول (نام) و ستون دوم (موضوع) فایل نمونه من:

$ بیخیال ‘{print $1, $2} sample_file.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

مثال 4: از Awk برای شمارش و استفاده کنید print تعداد خطوطی که یک الگو در آنها مطابقت دارد

می‌توانید به awk بگویید تعداد خطوطی را که در آنها یک الگوی مشخص مطابقت دارد، بشمارد و سپس آن «شمارش» را خروجی کند.

نحو:

$ بیخیال ‘/pattern_to_be_matched/{++cnt} END {print “Count = “, cnt}’

filename.txt

مثال:

در این مثال، من می‌خواهم تعداد افرادی که موضوع «انگلیسی» را تدریس می‌کنند، بشمارم. بنابراین به دستور awk می گویم که با الگوی “انگلیسی” و print تعداد خطوطی که این الگو در آنها مطابقت دارد.

$ بیخیال ‘/english/{++cnt} END {print “Count = “, cnt}’ sample_file.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

شمارش در اینجا نشان می دهد که 2 نفر در حال آموزش زبان انگلیسی از سوابق فایل نمونه هستند.

پیشنهاد می‌کنیم بخوانید:  لیست فایل ها را با استفاده از Bash Script کپی کنید

مثال 5: از awk to استفاده کنید print فقط خطوطی با بیش از تعداد مشخصی کاراکتر

برای این کار، از تابع awk داخلی به نام “طول” استفاده خواهیم کرد. این تابع طول رشته ورودی را برمی گرداند. بنابراین، اگر ما می خواهیم awk به print فقط خطوطی با تعداد کاراکترهای بیشتر یا حتی کمتر از آن، می‌توانیم از تابع length به شکل زیر استفاده کنیم:

برای چاپ خطوط با کاراکترهای بیشتر از عدد:

$ بیخیال “طول ($0) > n” filename.txt

برای چاپ خطوط با کاراکترهای کمتر از عدد:

$ بیخیال “طول ($0) < n" filename.txt

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

مثال:

دستور زیر خواهد بود print فقط خطوطی از فایل نمونه من که دارای کاراکترهای بیش از 30 هستند:

$ بیخیال “طول ($0) > 30” sample_file.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

مثال 6: از awk برای ذخیره خروجی فرمان در فایل دیگری استفاده کنید

با استفاده از عملگر تغییر مسیر ‘>’، می توانید از دستور awk استفاده کنید print خروجی آن به یک فایل دیگر این راهی است که می توانید از آن استفاده کنید:

$ بیخیال “معیارهای_چاپ” filename.txt > outputfile.txt

مثال:

در این مثال، من از عملگر redirection با دستور awk به استفاده خواهم کرد print فقط اسامی کارکنان (ستون 1) در یک فایل جدید:

$ بیخیال ‘{print $1} sample_file.txt > staff_names.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

من از طریق دستورات cat تأیید کردم که فایل جدید فقط شامل نام کارمندان است.

مثال 7: از awk to استفاده کنید print فقط خطوط غیر خالی از یک فایل

Awk چند دستور داخلی دارد که می توانید از آنها برای فیلتر کردن خروجی استفاده کنید. به عنوان مثال، دستور NF برای نگه داشتن تعداد فیلدها در رکورد ورودی فعلی استفاده می شود. در اینجا از دستور NF استفاده خواهیم کرد print فقط خطوط غیر خالی فایل:

$ بیخیال ‘NF > 0’ sample_file.txt

بدیهی است که می توانید از دستور زیر استفاده کنید print خطوط خالی:

$ بیخیال “NF < 0" sample_file.txt

مثال 8: از awk برای شمارش کل خطوط یک فایل استفاده کنید

یک تابع داخلی دیگر به نام NR تعداد رکوردهای ورودی (معمولاً خطوط) یک فایل معین را نگه می دارد. می توانید از این تابع در awk به صورت زیر برای شمارش تعداد خطوط یک فایل استفاده کنید:

$ بیخیال ‘پایان { print NR }’ sample_file.txt

چگونه یک فایل از رشته ها را با Awk تقسیم کنیمچگونه یک فایل از رشته ها را با Awk تقسیم کنیم

این اطلاعات اولیه ای بود که برای شروع تقسیم فایل ها با دستور awk نیاز دارید. می‌توانید از ترکیب این مثال‌ها برای دریافت اطلاعات معنادارتر از فایل رشته‌های خود از طریق awk استفاده کنید.

برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1402-12-31 15:25:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید