Чӣ тавр бояд ба AWK фармонҳо ва сутунҳо навишта шавад

Фармонҳо, матн ва мисолҳо

Фармони тасвири усули пуриқтидор барои коркард ё таҳлили файлҳои матн, аз ҷумла, файлҳои маълумотҳое, ки бо рентгенҳо (сутунҳо) ва сутунҳо ташкил карда мешаванд.

Амалҳои оддии оддӣ метавонанд аз хати фармон истифода карда шаванд . Вазифаҳои маҷмӯии маҷмӯӣ бояд ҳамчун барномаи аҷиб (ба монанди схемаҳои аҷиб) ба файл навишта шаванд.

Намунаи асосии амр ба монанди ин аст:

awk 'pattern {action}' вироиш-файл> варақаи файл

Ин маънои онро дорад, ки ҳар як сатри файли воридшударо гиред; Агар сатре, ки намунаро дар бар гирад, амалро ба сатр мегузорад ва хати натиҷавиро ба файли протокол менависад. Агар намуна истисно карда шавад, амал барои ҳама сатр истифода мешавад. Барои намуна:

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

Ин изҳорот унсури сутуни 5-и ҳар як сатрро мегирад ва онро ҳамчун хати дар файли баромад "output.txt" менависад. '4 $' ба сатри дуюм ишора мекунад. Ҳамин тавр шумо метавонед сутуни якум, дуюм ва сеюмро, бо $ 1, $ 2, $ 3, ва ғ. Дастрас кунед. Сутунҳои муқаррарӣ аз рӯи фарқият ё ҷадвалбандҳо (бо номи фазои сафед) ҷудо карда мешаванд. Пас, агар файли "table1.txt" ин сатрҳоро дар бар гирад:

1, Ҷейнин Тимберлейк, Title 545, Нарх 7,30 2, Taylor Swift, Title 723, Нарх $ 7.90 3, Mick Jagger, Title 610, Нарх $ 7.90 4, Ла Гала, Title 118, Нарх $ 7.30 5, Johnny Cash, Title 482, Нарх $ 6.50 6, Elvis Presley, Title 335, Price $ 7.30 7, Ҷон Леннон, Title 271, Нарх $ 7.90 8, Майкл Ҷексон, Title 373, Нарх 5,50

Пас фармон фармони зеринро ба файли версияи "output1.txt" нависед:

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

Агар ҷудосози сутуни ҷузъҳо аз ҷузъҳо ё ҷадвалҳо, ба монанди вергул, шумо метавонед, ки дар изҳороти аҷибтарини зерин муайян кунед:

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

Ин ҷузъро аз сутуни 3-и ҳар як сатр интихоб мекунад, агар сутунҳо аз тарафи верма ҷудо карда шаванд. Бинобар ин, маҳсулот дар ин ҳолат чунин хоҳад буд:

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

Рӯйхати ибораҳо дар дохили қуттиҳои қавӣ ('', '}') блок номида мешавад. Агар шумо дар як блок ифодаи шарҳдиҳиро гузоред, дар дохили блок танҳо агар шарт аст, иҷро карда мешавад.

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

Дар ин ҳолат ҳолат $ 7 == "$ 7.30" мебошад, ки маънои онро дорад, ки унсурчаи сутуни 7 $ 7.30 аст. Нишондиҳанда дар пеши аломати доллари ИМА барои пешгирӣ кардани система аз тарҷумаи $ 7 ҳамчун тағйирёбанда ва ба ҷои иваз кардани доллари доллари амрикоӣ истифода мешавад.

Бинобар ин, ин иқтибос тасвири элементро дар сутуни 3-юми ҳар як сатр, ки дар сутуни 7 $ 7.30 дорад, чоп мекунад.

Шумо инчунин метавонед ҳолати доимиро ҳамчун ҳолат истифода баред. Барои намуна:

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

Дар байни ду секунҷаҳо ("/") ифодаи муқаррарӣ мебошад. Дар ин ҳолат, ин танҳо сатри "30" аст. Ин маънои онро дорад, ки агар сатр дар сатри "30" бошад, система элементро дар сутуни 3-и ин сатр чоп мекунад. Натиҷа дар мисоли дар боло зикршуда инҳоянд:

Timberlake, Gaga, Presley,

Агар унсурҳои ҷадвалӣ рақамҳои рақамӣ бошанд, ҳисобҳои ҳисобро дар ин мисол иҷро мекунанд:

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

Ғайр аз тағйирёбандаҳое, ки ба унсурҳои сатрҳои ҷорӣ ($ 1, $ 2 ва ғ.) Дастрасанд, $ 0, ки ба сатрҳои пурра (сатр) ишора мекунад, ва НФ, ки ба шумораи майдонҳо нигоҳ мекунад.

Шумо инчунин метавонед, ки дар ин намунаи тағирёбандаҳои нав муайян кунед:

awk '{sum = 0; барои (col = 1; col <= NF; col + + +) + + $ col; маҷаллаи чопӣ; } '

Ин ба ҳисоби ҳамаи элементҳои ҳар сатр ҳисоб мекунад ва чоп мекунад.

Ҳисоботҳои аксар аксаран бо фармонҳои сегона ҳамроҳ мешаванд .