AWK විධානයන් සහ ලියවිලි ලියන්න

විධාන, රීති සහ උදාහරණ

Awk විධානය යනු පෙළ ගොනු සැකසීමට හෝ විශ්ලේෂණය කිරීමේ ප්රබල ක්රමයකි. විශේෂයෙන්, පේළි (පේළි) සහ තීරු මගින් සංවිධානය කරන දත්ත ගොනු.

සරල awk විධානයන් විධාන රේඛාවේ සිට ක්රියාත්මක විය හැක. වඩාත් සංකීර්ණ කාර්යයන් අග්ක වැඩසටහන් (අග්නෙ වික්ෂිප්ත විධාන) ලෙස ලිවිය යුතුය.

Awk විධානයේ මූලික ආකෘතිය මෙවැන්නකි:

awk 'රටාව {ක්රියාව}' ආදාන-ගොනුව> ප්රතිදාන-ගොනුව

මෙයින් අදහස් වන්නේ: ආදාන ගොනුවේ සෑම පේළියක්ම ගන්න; පේළියෙහි ඇති රටාව පේළියෙහි ක්රියාවලිය රේඛාවට අනුකූල වන අතර එහි ප්රතිඵලයක් ලෙස ප්රතිදාන-ගොනුව වෙත ලියන්න. රටාව අහෝසි කළ හොත්, ක්රියාවලිය සියලු රේඛාවට අදාළ වේ. උදාහරණයක් වශයෙන්:

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

මෙම ප්රකාශය එක් පේළියේ 5 වන තීරුවෙහි මූලද්රව්යය වන අතර එහි ප්රතිදානය ගොනුව "output.txt" ලෙස ලිවිය හැක. '$ 4' විචල්යය දෙවන තීරුව වෙත යොමු කරයි. එලෙසම ඔබට පළමු, දෙවන, සහ තෙවන තීරු වෙත $ 1, $ 2, $ 3, ආදිය ලබා ගත හැකිය. සාමාන්යයෙන් තීරු අර්ථ දක්වන්නේ, හිස් අවකාශයන් හෝ ටැබ් වලින් වෙන් කරන ලද උපකල්පනයන් මත පදනම් වන (සුදු ඉඩක් ලෙස). එබැවින්, ආදාන ගොනුව "table1.txt" මෙම රේඛා අඩංගු වේ:

1, ජස්ටින් ටිම්බල්කේක්, මාතෘකාව 545, මිල ඩොලර් 7.30 2, ටේලර් ස්විෆ්ට්, හිමිකම් 723, මිළ $ 7.90 3, මික් ජැග්ගර්, මාතෘකාව 610, මිළ $ 7.90 4, Lady Gaga, මාතෘකාව 118, මිළ $ 7.30 5, ජොනී කෑෂ්, මාතෘකාව 482, මිලි. 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 අර්ථකථනය කිරීම වැලැක්වීම සඳහා ක්රමවේදය භාවිතා කිරීම වැළැක්වීමට භාවිතා කරනු ලැබේ.

එමනිසා මෙම අක්ෂක ප්රකාශය එක් පේළියේ 3 වන තීරුවේ 3 වන තීරුවේ "$ 7.30" තීරුව මුද්රණය කරයි.

ඔබට කොන්දේසියක් ලෙස සාමාන්ය ප්රකාශනය භාවිතා කළ හැකිය. උදාහරණයක් වශයෙන්:

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

ස්ලැෂාවන් දෙක අතරේ '(/') යනු නිතිපතා ප්රකාශනයයි. මෙම අවස්ථාවෙහිදී, එය "30" මෙහි අර්ථය වන්නේ පේළියෙහි "30" යන පේළිය අඩංගු නම්, එම පේළියේ 3 වන තීරුවේ මූලද්රව්යය මුද්රණය කරයි. ඉහත උදාහරණයේ ප්රතිදානය වන්නේ:

ටිම්බල්කේක්, ගාග, ප්රිස්ලි,

වගු මූලද්රව්ය සංඛ්යා අවිනිශ්චිත නම් මෙම උදාහරණයේ මෙන් ඒවා මත ගණනය කළ හැකිය:

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

වත්මන් පේළිවල මූලද්රව්යවලට ප්රවේශ වන විචල්යයන් අමතරව ($ 1, $ 2, ආදිය) විචල්යය $ 0 සම්පූර්ණ පේළිය (පේළිය) සහ විචල්යය NF යන ක්ෂේත්රයට අයත් වේ.

මෙම උදාහරණයේදී නව විචල්යයන් ද ඔබට අර්ථ දැක්විය හැකිය:

awk '{sum = 0; (col = 1; col <= NF; col ++) sum + = $ col; මුද්රිත මුදල; } '

මෙය එක් එක් පේළියේ සියලු අංගයන්ගේ එකතුව මුද්රණය කරයි.

Awk ප්රකාශයන් නිතරම sed විධානයන් සමඟ ඒකාබද්ධ කර ඇත.