Როგორ დავწეროთ AWK ბრძანებები და სკრიპტები

ბრძანებები, სინტაქსი და მაგალითები

Awk ბრძანება არის მძლავრი მეთოდი ტექსტური ფაილების დამუშავების ან ანალიზისათვის, კერძოდ, ფაილების (რიგები) და სვეტების მიერ ორგანიზებულ მონაცემთა ფაილები.

მარტივი awk ბრძანებები შეიძლება აწარმოებს ბრძანებათა სტრიქონიდან . უფრო რთულ ამოცანებს უნდა ჩაიწეროს, როგორც უახლესი პროგრამები (ე.წ.

უცნაური ბრძანების ძირითადი ფორმატი ასე გამოიყურება:

awk "ნიმუში {action} 'input-file> გამომავალი ფაილი

ეს ნიშნავს: შეყვანის ფაილის თითოეული ხაზი; თუ ხაზი შეიცავს ნიმუში ხაზს მოქმედებაში და გამოაქვეყნოს ხაზის გამომუშავება. თუ ნიმუში არ არის გამოტოვებული, მოქმედებს ყველა ხაზი. მაგალითად:

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

ეს განცხადება იღებს თითოეული ხაზის მე -5 სვეტის ელემენტს და წერს, როგორც გამომავალი ფაილის "output.txt". ცვლადი "$ 4" ეხება მეორე სვეტს. ანალოგიურად თქვენ შეგიძლიათ მიიღოთ პირველი, მეორე და მესამე სვეტი, $ 1, $ 2, $ 3 და ა.შ. შესაძლებელია სვეტების მიერ გამოყოფილი ფართები ან ჩანართები (ე.წ. თეთრი სივრცე). ასე რომ, თუ შეყვანის ფაილი "table1.txt" შეიცავს ამ ხაზებს:

ლედი გაგა, სათაური 118, ფასი $ 7.30 5, ჯონი ნაღდი, სათაური 482, ფასი $ 6.50, ჯეინ ჯეგერი, სათაური 610, ფასი $ 7.50 6, ელვის პრესლისი, სათაური 335, ფასი $ 7.30 7, ჯონ ლენონი, სათაური 271, ფასი $ 7.90 8, მაიკლ ჯექსონი, სათაური 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 სვეტში ელემენტის ბეჭდავს. გამომავალი მაგალითია:

ტიმბერლეიკი, გაგა, პრესლი,

თუ მაგიდის ელემენტები არიან ნომრები awk შეგიძლიათ გაუშვათ გათვლები მათ, როგორც ამ მაგალითში:

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

ცვლადების გარდა, მიმდინარე რიგის ელემენტები ($ 1, $ 2 და ა.შ.) არის ცვლადი $ 0, რომელიც ეხება სრულ სტრიქონს (ხაზის) და ცვლადი NF, რომელიც ფლობს მთელ რიგ სფეროებს.

თქვენ ასევე შეგიძლიათ განსაზღვროთ ახალი ცვლადები, როგორც ეს მაგალითში:

awk '{sum = 0; (col = 1; col <= NF; col ++) თანხა + = $ col; ბეჭდვითი თანხა; } '

ეს გამოთვლილია და აწესებს ყოველი რიგის ყველა ელემენტის თანხას.

მწარე განცხადებები ხშირად კომბინირებულია sed ბრძანებით .