AWK حڪم ۽ لکتن کي ڪيئن لکڻو

حڪم، نحو ۽ مثال

آرڪي حڪم، ٽيڪسٽ فائلن جي پروسيسنگ يا تجزيو ڪرڻ لاء هڪ طاقتور طريقو آهي، خاص طور تي، ڊيٽا فائلن جيڪي لائين (قطار) ۽ ڪالمن ذريعي ترتيب ڏنل آهن.

سادي آرڪ ائڊمنس ڪمن مان هلائي سگھجي ٿو. وڌيڪ پيچيده ڪارڪن کي فائل ۾ ايڪي پروگرامن (نامياري ايڪي سکرٽس) جي طور تي لکيو وڃي ٿو.

آرڪي حڪم جي بنيادي شڪل هن طرح آهي:

awk 'pattern {action}' input-file> output-file

ان جو مطلب: هر لڪير کي انسٽاليشن واري فائل کي وٺو؛ جيڪڏهن قطار ۾ نمونن تي مشتمل هوندي آهي ته لائن جي ڪمن کي لاڳو ڪريو ۽ نتيجه واري لائن کي آئوٽ فائيل تائين لکي وڃي. جيڪڏهن اهو نمونو ڇڏيل آهي، اهو عمل سڀني لائن تي لاڳو ٿئي ٿو. مثال طور:

awk '{$ $ 5}' table1.txt> output1.txt

اهو بيان هر لڪير جي پنجين ڪالمن جي عنصر حاصل ڪري ٿو ۽ انٽيٽيڪيشن فائيل "output.txt" ۾ ليڪ لائين ٿا. متغير '$ 4' کي ٻئي ڪالمن ڏانهن اشارو ڪيو ويو آهي. ساڳئي طرح توهان پهرين، سيڪنڊ ۽ ٽيون ڪالمن تي، $ 1، $ 2، $ 3، وغيره سان گڏ ڪري سگهو ٿا. ڊفالٽ ڪلمن جي ذريعي، جڳهن يا ٽيبز کان الڳ ٿي وڃن ٿا (جنهن کي نامور سپا جاء). تنهن ڪري، جيڪڏهن انسٽال ٿيل فائيل "table1.txt" ۾ اهي ليڪون آهن:

1، جسٹن ٽمبرليڪ، عنوان 545، قيمت $ 7.30 2، ٽيلر سوفٹ، ٽائيم 723، قيمت $ 7.90 3، مکڪ جاگر، 610 ڊالر، قيمتي قيمت 7.90 4، ليڊي گگا، عنوان 118، قيمت $ 7.30 5، جاني ڪيش، عنوان 482، قيمت $ 6.50 6، ايلسس پريسلي، ٽائيٽل 335، قيمت 7.7 ڊالر، جان لينن، ٽائيم 271، قيمت $ 7.90 8، مائڪيڪڪ جڪس، عنوان 373، قيمت $ 5.50

ان کان پوء ايندڙ آرڊر کي ٻاھرين فائل "output1.txt" ۾ ايندڙ لين کي لکندو.

545، 723، 610، 118، 482، 335، 271، 373،

جيڪڏهن ڪالمن الڳ ڪندڙ خانداني يا ٽيب کان سواء ٻيو ڪجهه آهي، جهڙوڪ ڪواما، توهان وضاحت ڪري سگهو ٿا ته جيئن ته ايڪي بيان ۾ ڏنل آهي:

awk -F، '{$ $ 3}' table1.txt> output1.txt

هي هر ليڪ جي ڪالمن 3 کان عنصر چونڊيندو جيڪڏهن کالم کي ڪاما کان الڳ ٿي سمجهيو ويندو. تنهن ڪري انٽرويو، هن صورت ۾، ها:

عنوان 545 عنوان 723 عنوان عنوان 610 عنوان 118 عنوان عنوان 482 عنوان 335 جو عنوان 271 عنوان 373

بيانن جي لسٽ ۾ اندر گھريل برقي ('{'، '}') کي بلاڪ سڏيو ويندو آهي. جيڪڏهن توهان ڪنهن بلاڪ جي سامهون هڪ شرطي بيان ڪر، بلاڪ اندر بيان بيان ڪيو ويندو ته شرط صحيح آهي.

awk '$ 7 == "\ $ 7.30" جدول $ 3}' table1.txt

انهي حالت ۾، شرط $ 7 == "\ $ 7.30" آهي، جنهن جو مطلب آهي ته عنصر ڪالمن 7 تي $ 730 جي برابر آهي. ڊالر جي پوئتي جي پسمنظر نشاندهي لاء نظام کي روڪڻ کان بچاء لاء $ 7 جي تعبير کان وٺي ۽ بجائي لفظي نشاني کي لفظي طور وٺي وٺو.

تنهنڪري هن ايڪي بيان هر ليڪ جي دريم ڪالمن تي عنصر کي اشارو ڏئي ٿو جيڪو 7 7 "$ 730" ۾ هجي.

توهان باقاعده اشارو پڻ شرط طور استعمال ڪري سگهو ٿا. مثال طور:

awk '/ 30 / {print $ 3}' table1.txt

ٻن سستن جي وچ ۾ جملو ('/') باقاعده اظهار آهي. انهي صورت ۾، اهو صرف سوراخ آهي "30." ان جو مطلب ته هڪ ليڪ "string" تي مشتمل آهي، اهو نظام انهي قطار جي دريم ڪالمن تي عنصر ڏي ٿو. مٿين مثال ۾ ٻاھر ٿي ويندو:

ٽمبرليڪ، گيگا، پريسلي،

جيڪڏهن ٽيبل جي عناصر انگن اکرن تي هلائي سگھجن ٿيون ان تي حساب ڪري سگھن ٿيون جيئن هن مثال ۾:

awk '{print ($ 2 * $ 3) + $ 7}'

متغيرات جي علاوه جيڪي موجوده قطار ($ 1، $ 2، وغيره) جي رسائي عناصر اتي متغير $ 0 آهي، جيڪو مڪمل قطار (لائن) ۽ متغير اين ايف جو اشارو ڏئي ٿو فيلڊ جو تعداد.

توهان هن مثال ۾ نئين متغير پڻ وضاحت ڪري سگھو ٿا:

awk '{sum = 0؛ (col = 1؛ col <= NF؛ col ++) sum + = $ col؛ پرنٽ رقم؛ } '

هي هڪ قطار جي سڀني عنصرن جو مجموعو ٺاهي ٿو ۽ پرنٽ.

ايک بيان اڪثر ڪري سؤ حڪمن سان گڏ گڏيل آهن.