របៀបសរសេរពាក្យបញ្ជា AWK និងស្គ្រីប

ពាក្យបញ្ជាវាក្យសម្ព័ន្ធនិងឧទាហរណ៍

ពាក្យបញ្ជា awk គឺជាវិធីសាស្ត្រដ៏មានអនុភាពសម្រាប់ដំណើរការឬវិភាគឯកសារអត្ថបទជាពិសេសឯកសារទិន្នន័យដែលត្រូវបានរៀបចំដោយបន្ទាត់ (ជួរដេក) និងជួរឈរ។

ពាក្យបញ្ជា awk ធម្មតាអាចត្រូវបានរត់ពី បន្ទាត់ពាក្យបញ្ជា ។ ភារកិច្ចស្មុគស្មាញជាច្រើនគួរតែត្រូវបានសរសេរជាកម្មវិធី awk (ដែលហៅថាស្គ្រីប awk) ទៅឯកសារមួយ។

ទ្រង់ទ្រាយមូលដ្ឋាននៃពាក្យបញ្ជា awk មួយមើលទៅដូចនេះ:

awk 'លំនាំ' {action} 'ឯកសារបញ្ចូល -> ឯកសារលទ្ធផល

នេះមានន័យថា: យកបន្ទាត់នីមួយៗនៃឯកសារបញ្ចូល។ ប្រសិនបើបន្ទាត់មានលំនាំអនុវត្តសកម្មភាពទៅបន្ទាត់និងសរសេរបន្ទាត់លទ្ធផលទៅឯកសារលទ្ធផល។ ប្រសិនបើលំនាំដើមត្រូវបានលុបសកម្មភាពត្រូវបានអនុវត្តទៅគ្រប់បន្ទាត់។ ឧទាហរណ៍:

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

សេចក្តីថ្លែងការណ៍នេះនឹងយកធាតុនៃជួរឈរទី 5 នៃបន្ទាត់នីមួយៗហើយសរសេរវាជាបន្ទាត់នៅក្នុងឯកសារលទ្ធផល "output.txt" ។ អថេរ '$ 4' សំដៅលើជួរឈរទីពីរ។ ដូចគ្នានេះដែរអ្នកអាចចូលប្រើជួរឈរទីមួយទីពីរនិងទីបីដោយ $ 1, $ 2, $ 3, ។ ល។ តាមជួរឈរលំនាំដើមត្រូវបានសន្មត់ថាត្រូវបានបំបែកដោយដកឃ្លាឬថេប (ហៅថាចន្លោះពណ៌ស) ។ ដូច្នេះប្រសិនបើឯកសារបញ្ចូល "table1.txt" មានបន្ទាត់ទាំងនេះ:

1, Justin Timberlake, ចំណងជើង 545, តម្លៃ 7,30 ដុល្លារ, Taylor Swift, ចំណងជើង 723, តម្លៃ 7,90 ដុល្លារ, 3, Mick Jagger, ចំណងជើង 610, តម្លៃ 7,90 ដុល្លារ, Lady Gaga, ចំណងជើង 118, តំលៃ 7,30 ដុល្លារ, Johnny Cash, ចំណងជើង 482, តំលៃ 6,50 ដុល្លារ។ 6, Elvis Presley, ចំណងជើង 335, តម្លៃ 7,30 ដុល្លារ 7, ចនឡេនណុន, ចំណងជើង 271, តម្លៃ 7,90 ដុល្លារ 8, លោក Michael Jackson, ចំណងជើង 373, តំលៃ 5,50 ដុល្លារ

បន្ទាប់មកពាក្យបញ្ជានឹងសរសេរបន្ទាត់ដូចខាងក្រោមទៅឯកសារលទ្ធផល "output1.txt":

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

ប្រសិនបើសញ្ញាបំបែកជួរឈរជាអ្វីមួយក្រៅពីដកឃ្លាឬផ្ទាំងដូចជាសញ្ញាក្បៀសអ្នកអាចបញ្ជាក់ថានៅក្នុងសេចក្តីថ្លែងការណ៍ awk ដូចខាងក្រោម:

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

វានឹងជ្រើសធាតុពីជួរទី 3 នៃបន្ទាត់នីមួយៗបើជួរឈរត្រូវបានចាត់ទុកថាត្រូវបានបំបែកដោយសញ្ញាក្បៀស។ ដូច្នេះទិន្នផលនៅក្នុងករណីនេះគឺ:

ចំណងជើង 545 ចំណងជើង 723 ចំណងជើង 610 ចំណងជើង 118 ចំណងជើង 482 ចំណងជើង 335 ចំណងជើង 271 ចំណងជើង 373

បញ្ជីនៃសេចក្តីថ្លែងការណ៍នៅក្នុងតង្កៀបអង្កាញ់ ('{', '}') ត្រូវបានគេហៅថាប្លុក។ ប្រសិនបើអ្នកដាក់កន្សោមលក្ខខ័ណ្ឌនៅពីមុខប្លុកសេចក្តីថ្លែងការណ៍នៅក្នុងប្លុកនឹងត្រូវបានប្រតិបត្តិតែនៅពេលដែលលក្ខខណ្ឌពិត។

awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txt

ក្នុងករណីនេះលក្ខខណ្ឌគឺ $ 7 == "\ $ 7.30" មានន័យថាធាតុនៅជួរឈរ 7 ស្មើរនឹង $ 7.30 ។ សញ្ញាប្រហាក់ប្រហែលនៅពីមុខសញ្ញាប្រាក់ដុល្លារត្រូវបានគេប្រើដើម្បីការពារប្រព័ន្ធពីការបកស្រាយតម្លៃ $ 7 ជាអថេរហើយជំនួសឱ្យសញ្ញាដុល្លារ។

ដូច្នេះសេចក្តីថ្លែងការណ៍ awk នេះចេញពីធាតុនៅជួរឈរទី 3 នៃបន្ទាត់នីមួយៗដែលមាន "7,30 ដុល្លារ" នៅជួរ 7 ។

អ្នកក៏អាចប្រើ កន្សោមធម្មតា ជាលក្ខខ័ណ្ឌផងដែរ។ ឧទាហរណ៍:

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

ឃ្លារវាងសញ្ញាីពីរ ('/') គឺជាកន្សោមធម្មតា។ ក្នុងករណីនេះវាគ្រាន់តែជាខ្សែអក្សរ "30. " នេះមានន័យថាប្រសិនបើបន្ទាត់មានខ្សែអក្សរ "30" ប្រព័ន្ធនឹងបោះពុម្ពចេញធាតុនៅជួរឈរទី 3 នៃបន្ទាត់នោះ។ លទ្ធផលនៅក្នុងឧទាហរណ៍ខាងលើគឺ:

Timberlake, Lady Gaga, Presley,

ប្រសិនបើធាតុតារាងជាលេខ awk អាចរត់ការគណនាលើពួកវាដូចក្នុងឧទាហរណ៍នេះ:

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

ក្រៅពីអថេរដែលចូលប្រើធាតុនៃជួរដេកបច្ចុប្បន្ន ($ 1, $ 2 ។ ល។ ) មានអថេរ $ 0 ដែលសំដៅទៅលើជួរដេកពេញលេញនិងអថេរ NF ដែលមានចំនួនវាល។

អ្នកក៏អាចកំណត់អថេរថ្មីដូចក្នុងឧទាហរណ៍នេះ:

awk '{sum = 0; សម្រាប់ (col = 1; col <= NF; col ++) sum + = $ col; ព្រីនបោះពុម្ព } '

នេះគណនានិងបោះពុម្ពផលបូកនៃធាតុទាំងអស់នៃជួរដេកនីមួយៗ។

សេចក្តីថ្លែងការណ៍ Awk ត្រូវបានរួមបញ្ចូលជាញឹកញាប់ជាមួយ ពាក្យបញ្ជា sed