AWK Commands များနှင့် Scripts ရေးထားလုပ်နည်း

commands, syntax နှင့်ဥပမာ

အဆိုပါ awk command ကိုအပြောင်းအလဲနဲ့သို့မဟုတ်လိုင်းများ (အတန်း) နှင့်စစ်ကြောင်းများကစီစဉ်ဖြစ်ကြောင်းအထူးသဖြင့်စာသားထဲမှာဖိုင်တွေ-, ဒေတာဖိုင်များကိုခွဲခြားစိတ်ဖြာများအတွက်အစွမ်းထက်နည်းလမ်းဖြစ်ပါတယ်။

ရိုးရှင်းသော awk ပညတ်တော်တို့ကိုမှ run နိုင်ပါတယ် command line က ။ ပိုမိုရှုပ်ထွေးတာဝန်များကိုဖိုင်တစ်ဖိုင်မှ (ဒါခေါ် awk script များ) awk အစီအစဉ်များအဖြစ်စာဖြင့်ရေးသားရပါမည်။

တစ်ဦး awk command ကို၏အခြေခံပုံစံကဒီတူ:

awk '' ပုံစံ {အရေးယူ} 'input ကို-file ကို> output ကို-file ကို

ဤသည်ကိုဆိုလိုသည်: အ input ကိုဖိုင်တစ်ခုချင်းစီကိုလိုင်းယူ; မျဉ်းပုံစံမျဉ်းမှ action ကို apply နှင့် output ကို-file ကိုဖို့ရရှိလာတဲ့လိုင်းရေးလိုက်ပါရှိသည်လျှင်။ ပုံစံချန်လှပ်လျှင်, action ကိုအားလုံးလိုင်းလျှောက်ထားသည်။ ဥပမာ:

awk table1.txt> output1.txt '' {$ 5 print ထုတ်} '

ဒါဟာထုတ်ပြန်ကြေညာချက်အသီးအသီးလိုင်းများ၏ 5th ကော်လံ၏ဒြပ်စင်ကြာနှင့် output ကိုဖိုင်ကို "output.txt" ၌တစ်ဦးလိုင်းအဖြစ်ကရေးသားခဲ့သည်။ အဆိုပါ variable ကို '' $ 4 '' ဒုတိယကော်လံကိုရည်ညွှန်းသည်။ အလားတူပင်သငျသညျဒုတိယ, ပထမနှင့်တတိယကော်လံ, etc $ 1, $ 2, $ 3, အတူ default အကော်လံအားဖြင့်နေရာသို့မဟုတ် tabs များ (ဒါဟုခေါ်တွင်အဖြူအာကာသ) ကကွဲကွာရမည်ယူဆနေကြသည်ကိုဝင်ရောက်နိုင်ပါတယ်။ ဒါကြောင့် input ကိုဖိုင်ကို "table1.txt" ဤလိုင်းများပါရှိသည်လျှင်:

1, Justin Timberlake, ခေါင်းစဉ် 545, စျေး $ 7.30 2, တေလာဆွစ်ဖ်, ခေါင်းစဉ် 723, စျေး $ 7.90 3, Mick Jagger, ခေါင်းစဉ် 610, စျေး $ 7.90 4, လေဒီဂါဂါ, ခေါင်းစဉ် 118, စျေး $ 7.30 5, ဂျော်နီငွေ, ခေါင်းစဉ် 482, စျေး $ 6,50 6, Elvis Presley ဆီမှာဆိုရင်ခေါင်းစဉ် 335, စျေး $ 7.30 7, John Lennon, ခေါင်းစဉ် 271, စျေး $ 7.90 8, မိုက်ကယ်ဂျက်ဆင်, ခေါင်းစဉ် 373, စျေး $ 5,50

ထိုအခါ command ကိုက output file ကို "output1.txt" ကိုအောက်ပါလိုင်းများကိုရေးမယ်လို့:

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

ကော်လံ separator ထိုကဲ့သို့သောကော်မာအဖြစ်နေရာများသို့မဟုတ် tabs များထက်အခြားအရာတစ်ခုခု, အကယ်. အောက်မှာဖော်ပြထားတဲ့အတိုင်း, သင် awk ကြေညာချက်ထဲမှာသတ်မှတ်နိုင်သည်

awk -F, table1.txt> output1.txt '' {$ 3 print ထုတ်} '

အဆိုပါစစ်ကြောင်းများတစ်ကော်မာများကကွဲကွာခံရဖို့စဉ်းစားနေကြလျှင်ဒီအသီးအသီးလိုင်း၏ကော်လံ 3 ကနေဒြပ်စင်ကို select ပါလိမ့်မယ်။ ထိုကြောင့်အထွက်, ဤကိစ္စတွင်အတွက်ပါလိမ့်မယ်:

ခေါင်းစဉ် 545 ခေါင်းစဉ် 723 ခေါင်းစဉ် 610 ခေါင်းစဉ် 118 ခေါင်းစဉ် 482 ခေါင်းစဉ် 335 ခေါင်းစဉ် 271 ခေါင်းစဉ် 373

အဆိုပါ curly bracket ( '{', '}') အတွင်း၌ထုတ်ပြန်ချက်များများ၏စာရင်းတစ်ခုပိတ်ပင်တားဆီးမှုဟုခေါ်သည်။ သင်တစ်ဦးပိတ်ပင်တားဆီးမှုများ၏ရှေ့မှောက်၌တစ်ဦးခြွင်းချက်စကားရပ်ထားလျှင်, ပိတ်ပင်တားဆီးမှုအတွင်းရှိကြေညာချက်အခြေအနေကိုမှန်မှသာလြှငျကွပ်မျက်ခံရလိမ့်မည်။

awk '' $ 7 == "\ $ 7,30" {$ 3 print ထုတ်} 'table1.txt

ဤကိစ္စတွင်ခုနှစ်, အခြေအနေကိုကော်လံ 7 မှာဒြပ်စင် $ 7,30 ညီမျှကြောင်း, ဆိုလိုတာက "\ $ 7,30" $ 7 == ဖြစ်ပါတယ်။ ဒေါ်လာစျေးနိမိတ်လက္ခဏာများ၏ရှေ့မှောက်၌အဆိုပါဘယ်ဘက်မျဉ်းစောင်းနေတဲ့ variable ကိုအဖြစ် $ 7 ပြန်ဆိုထံမှစနစ်တားဆီးများနှင့်အစားစာသားဒေါ်လာစျေးနိမိတ်လက္ခဏာကိုယူအသုံးပြုသည်။

ကော်လံ 7 မှာ "$ 7,30" ရှိပါတယ်တစ်ခုချင်းစီကိုလိုင်း၏ 3rd ကော်လံမှာဒြပ်စင်အထဲကဒါကြောင့်ဒီ awk ကြေညာချက်ထုတ်။

သင်တို့သည်လည်းသုံးနိုငျ regular expressions ကို အခြေအနေကိုအဖြစ်။ ဥပမာ:

awk '/ 30 / {$ 3 print ထုတ်}' table1.txt

နှစ်ခုမျဉ်းစောင်းအကြားအဆိုပါ string ကို ( '/') ပုံမှန်စကားရပ်ဖြစ်ပါတယ်။ ဤကိစ္စတွင်ခုနှစ်, အဲဒါကိုပဲ string ကို " 30. " ဖြစ်ပါတယ် တစ်လိုင်း string ကိုပါရှိသည်လျှင်ဤ "အသက် 30" ကိုဆိုလိုသည်, စနစ်ကြောင့်လိုင်း၏ 3rd ကော်လံမှာဒြပ်စင်အထဲကနေရိုက်ထုတ်။ အထက်ပါဥပမာမှာက output ပါလိမ့်မယ်:

Timberlake, လေဒီဂါဂါ, Presley ဆီမှာဆိုရင်

စားပွဲပေါ်မှာဒြပ်စင်နံပါတ်များကို awk ရောက်နေတယ်ဆိုရင်ဒီဥပမာထဲမှာရှိသကဲ့သို့၎င်းတို့အပေါ်တွက်ချက်မှု run နိုင်ပါတယ်:

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

လက်ရှိအတန်း၏ဒြပ်စင်ရယူသော variable တွေကို ($ 1, $ 2, etc) အပြင်လုံးဝအတန်း (လိုင်း), နှင့်လယ်ယာများ၏အရေအတွက်ရရှိထားသူဖြစ်သော variable ကိုအဲန်အက်ဖ်မှရည်ညွှန်းသော variable ကို $ 0 င်ရှိပါတယ်။

သင်တို့သည်လည်းဤဥပမာ၌ရှိသကဲ့သို့အသစ်က variable တွေကိုသတ်မှတ်နိုင်သည်

awk '{ပေါင်းလဒ် = 0; ပေါင်းလဒ် + = $ ဗိုလ်မှူးကြီး (;; ဗိုလ်မှူးကြီး <= အဲန်အက်ဖ်ဗိုလ်မှူးကြီး ++ ဗိုလ်မှူးကြီး = 1) သည် ဖြစ်. , ပုံနှိပ်ပေါင်းလဒ်; } '

ဤသည် computes နှင့်တစ်ဦးချင်းစီအတန်းသားအပေါငျးဒြပ်စင်များ၏ပေါင်းလဒ်နေရိုက်ထုတ်။

Awk ထုတ်ပြန်ချက်များမကြာခဏနှင့်အတူပေါင်းစပ်ကြသည် sed ပညတ်တော်တို့ကို