آشنایی با awk بهترین ابزار تجزیه متن

یکشنبه 19 آبان 1398

ابزار تجزیه متن، بهترین ابزار تجزیه متن در حال حاضر است، ما در این مطلب قصد داریم کمی بیشتر درباره کارکرد این ابزار تجزیه متن صحبت کنیم.

 آشنایی با awk بهترین ابزار تجزیه متن

awk یک ابزار تجزیه متن بسیار قدرتمند است که برای سیستم های یونیکس و سیستم های مشابه یونیکس به کار گرفته می شود. نکته ای که درباره این ابزار وجود دارد این است که از آن جایی که در آن توابعی خاص برنامه نویسی شده اند شما می توانید از این ابزار تجزیه متن برای کارهای مشترک دیگر و تجزیه موارد مختلف نیز استفاده کنید؛ علاوه بر این، این ابزار تجزیه متن به عنوان یک زبان برنامه نویسی نیز شناخته می شود. به احتمال زیاد شما قصد ندارید که اپلیکیشن GUI بعدی خود را با استفاده از awk بسازید و به احتمال زیاد این ابزار نمی تواند جای زبان اسکریپت نویسی پیش فرض شما را بگیرد اما با این حال این ابزار یک ابزار قدرتمند برای انجام بعضی از کارهای خاص شناخته می شود.


چند نکته درباره کاربردهای این ابزار تجزیه متن

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

 ابزار تجزیه متن


نکاتی مهم درباره awk، بهترین ابزار تجزیه متن

سینتکس پایه ای awk به شکل زیر است:

awk [options] 'pattern {action}' file

برای شروع کار با این ابزار تجزیه متن این فایل نمونه را بسازید و نام آن را colours.txt قرار دهید.

name       color  amount

apple      red    4

banana     yellow 6

strawberry red    3

grape      purple 10

apple      green  8

plum       purple 2

kiwi       brown  4

potato     brown  9

pineapple  yellow 5

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

 ابزار تجزیه متن


چاپ کردن یک ستون

در awk تابع print آن چیزی که شما تعیین می کنید را نمایش می دهد. انواع مختلفی از متغیرهای از پیش تعریف شده وجود دارند که شما می توانید از آن ها استفاده کنید اما برخی از رایج ترین آن ها اعداد صحیح هستند که یک ستون را در یک فایل متنی طراحی می کنند. اگر شما آن را امتحان کنید نتیجه ای مانند نتیجه زیر را مشاهده می کنید:

$ awk '{print $2;}' colours.txt

color

red

yellow

red

purple

green

purple

brown

brown

yellow

در این حالت این ابزار تجزیه متن ستون دوم را که با $2 برچسپ گذاری شده است نمایش می دهد. این موضوع نسبتا بصری است بنابراین احتمالا خود شما می توانید حدس بزنید که چاپ کردن $1 باعث نمایش ستون اول و چاپ $3 باعث چاپ ستون سوم و ... می شود.

توجه داشته باشید که برای نمایش تمامی ستون ها کافی است که $0 را چاپ کنید.

عددی که بعد از علامت $ آورده می شود در واقع یک عبارت است، بنابراین دو دستور $2 و $(1+1) در واقع یک خروجی را خواهند داشت.

 ابزار تجزیه متن


انتخاب ستون ها با شرط های مختلف

فایل نمونه ای که شما استفاده می کنید بسیار ساختار یافته است. این فایل دارای یک ردیف است که به عنوان یک هدر رفتار می کند و ستون ها نیز به صورت مستقیم با یکدیگر در ارتباط هستند. با تعریف کردن برخی از نیازمندی های مشروط شما می توانید تعیین کنید که زمانی که awk داده های شما را بررسی می کند از آن می خواهید که چه چیزی را به شما بازگرداند. به عنوان مثال، برای مشاهده موارد موجود در ستون دوم که با عبارت yellow تطابق دارند و همینطور پرینت کردن محتوای موجود در ستون اول به شکل زیر عمل می کنیم:

awk '$2=="yellow"{print $1}' file1.txt

banana

pineapple

عبارت های منظم نیز دقیقا به همین شکل کار می کنند. این شرط در واقع به دنبال $2 برای تقریب زدن حرف p است که بعد از آن ممکن است یک یا چند حرف آمده باشند. مثال زیر را در نظر بگیرید:

$ awk '$2 ~ /p.+p/ {print $0}' colours.txt

grape   purple 10

plum    purple  2

یکی از نکات بسیار جالبی که درباره این ابزار تجزیه متن وجود دارد این است که اعداد به صورت طبیعی و به راحتی در این ابزار تفسیر می شوند. به عنوان مثال برای چاپ هر سطر به همراه یک ستون که شامل یک عدد بزرگتر از 5 است داریم:

awk '$3>5 {print $1, $2}' colours.txt

name    color

banana  yellow

grape   purple

apple   green

potato  brown

 ابزار تجزیه متن


جدا کننده فیلدها در این ابزار تجزیه متن

به صورت پیش فرض این ابزار تجزیه متن از اسپیس برای جدا کردن فیلدها استفاده می کند، البته توجه داشته باشید که بعضی از فایل های متنی از اسپیس برای تعریف کردن فیلدها استفاده نمی کنند. به عنوان مثال شما می توانید یک فایل را بسازید که دارای محتوای زیر باشد و نام آن را colours.csv بنامید:

name,color,amount

apple,red,4

banana,yellow,6

strawberry,red,3

grape,purple,10

apple,green,8

plum,purple,2

kiwi,brown,4

potato,brown,9

pineapple,yellow,5

زمانی که شما تعیین می کنید کدام کاراکتر باید به عنوان جدا کننده مورد استفاده قرار بگیرد awk می تواند با داده ها دقیقا به همان شکل رفتار کند. شما می توانید از گزینه field-separator برای انتخاب این جدا کننده استفاده کنید.

$ awk -F"," '$2=="yellow" {print $1}' file1.csv

banana

pineapple

 ابزار تجزیه متن


ذخیره کردن خروجی

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

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt

این کد در واقع یک فایل را می سازد که محتوای آن کوئری است که شما از awk گرفته اید.

یکی دیگر از ویژگی های این ابزار تجزیه متن این است که با استفاده از آن شما می توانید یک فایل را به چند فایل تقسیم کنید که ستون های آن ها گروه بندی شده است. اگر شما قصد دارید که فایل colours.txt را براساس این که در هر سطر چه رنگ هایی قرار می گیرد تقسیم بندی کنید شما می توانید این ابزار را وادار کنید که مسیر هر کوئری را تغییر دهد که دستور تغییر مسیر آن در دستورات awk شما قرار دارد.

$ awk '{print > $2".txt"}' colours.txt

این کار باعث می شود تا فایل هایی با  نام های yellow.txt، red.txt و ... ایجاد شود.

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید