{"id":83055,"date":"2020-05-28T01:42:15","date_gmt":"2020-05-27T23:42:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki"},"modified":"2020-05-28T01:42:15","modified_gmt":"2020-05-27T23:42:15","slug":"kak-linuxovskij-sort-sortiruet-stroki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki","title":{"rendered":"Si sorton linuksi Linux&#8217;ov p\u00ebr rreshta","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Hyrje<\/h1>\n<p><\/p>\n<p>E gjith\u00e7ka nisi me nj\u00eb skript t\u00eb shkurt\u00ebr, i cili duhej t\u00eb bashkonte informacionin mbi adresat <em>e-mail<\/em> e punonj\u00ebsve, t\u00eb marr\u00eb nga lista e p\u00ebrdoruesve t\u00eb grupit t\u00eb post\u00ebs me pozitat e punonj\u00ebsve, t\u00eb marra nga baza e t\u00eb dh\u00ebnave t\u00eb departamentit t\u00eb resurseve njer\u00ebzore. T\u00eb dy listat ishin eksportuar n\u00eb skedar\u00eb tekstual\u00eb n\u00eb kodimin Unicode <em>UTF-8<\/em> dhe ishin ruajtur me funde rreshtash t\u00eb Unix-it.<\/p>\n<p><\/p>\n<p>P\u00ebrmbajtja <em>mail.txt<\/em><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Ivanov Andrey;ia@example.com<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebrmbajtja <em>buhg.txt<\/em><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Ivanova Alla;piktore\nYolkina Ella;kranist\nIvanov Andrey;pun\u00ebtor\nAbakanov Mikhail;piktor<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebr t\u00eb bashkuar, skedar\u00ebt u rendit\u00ebn me komand\u00ebn e Unix-it <em>sort<\/em> dhe iu dor\u00ebzuan programit t\u00eb Unix-it <em>join<\/em>, i cili p\u00ebrfundoi papritur me nj\u00eb gabim: <\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; sort buhg.txt &gt; buhg.srt\n$&gt; sort mail.txt &gt; mail.srt\n$&gt; join buhg.srt mail.srt &gt; result\njoin: buhg.srt:4: nuk \u00ebsht\u00eb e renditur: Ivanov Andrey;pun\u00ebtor<\/code><\/pre>\n<p><\/p>\n<p>Shikimi i rezultatit t\u00eb renditjes me sy tregoi se renditja n\u00eb p\u00ebrgjith\u00ebsi ishte e sakt\u00eb, por n\u00eb rastin e p\u00ebrputhjeve t\u00eb mbiemrave mashkullor\u00eb dhe fem\u00ebror\u00eb, femrat shkojn\u00eb para mashkullor\u00ebve:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; sort buhg.txt\nAbakanov Mikhail;piktor\nYolkina Ella;kranist\nIvanova Alla;piktore\nIvanov Andrey;pun\u00ebtor<\/code><\/pre>\n<p><\/p>\n<p>Duket si nj\u00eb gabim renditjeje n\u00eb Unicode ose si nj\u00eb manifestim i feminizmit n\u00eb algoritmin e renditjes. E para, natyrisht, \u00ebsht\u00eb m\u00eb e besueshme.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>T\u00eb l\u00ebm\u00eb m\u00ebnjan\u00eb p\u00ebr momentin <em>join<\/em> dhe t\u00eb p\u00ebrqendrohemi te <em>sort<\/em>. Le t\u00eb provojm\u00eb t\u00eb zgjidhim problemin p\u00ebrmes metod\u00ebs s\u00eb prov\u00ebs dhe gabimit. P\u00ebr fillim, do t\u00eb ndryshojm\u00eb lokacionin nga <em>en_US<\/em> n\u00eb <em>ru_RU<\/em>. P\u00ebr renditjen mjafton t\u00eb vendosim nj\u00eb variab\u00ebl mjedisi <em>LC_COLLATE<\/em>, por s'kemi p\u00ebr t\u00eb u marr\u00eb me gj\u00ebra t\u00eb vogla:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LANG=ru_RU.UTF-8 sort buhg.txt\n\u0410\u0431\u0430\u043a\u0430\u043d\u043e\u0432 \u041c\u0438\u0445\u0430\u0438\u043b;\u043c\u0430\u043b\u044f\u0440\n\u0401\u043b\u043a\u0438\u043d\u0430 \u042d\u043b\u043b\u0430;\u043a\u0440\u0430\u043d\u043e\u0432\u0449\u0438\u0446\u0430\n\u0418\u0432\u0430\u043d\u043e\u0432\u0430 \u0410\u043b\u043b\u0430;\u043c\u0430\u043b\u044f\u0440\n\u0418\u0432\u0430\u043d\u043e\u0432 \u0410\u043d\u0434\u0440\u0435\u0439;\u0441\u043b\u0435\u0441\u0430\u0440\u044c<\/code><\/pre>\n<p><\/p>\n<p>Nuk ka ndryshuar asgj\u00eb.<\/p>\n<p><\/p>\n<p>Le t\u00eb provojm\u00eb t\u00eb rikodojm\u00eb skedar\u00ebt n\u00eb kodim me nj\u00eb bajt: <\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; iconv -f UTF-8 -t KOI8-R buhg.txt \n | LANG=ru_RU.KOI8-R sort \n | iconv -f KOI8-R -t UTF8<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebrs\u00ebri, nuk ka ndryshuar asgj\u00eb.<\/p>\n<p><\/p>\n<p>Nuk kemi \u00e7't\u00eb b\u00ebjm\u00eb, do t\u00eb duhet t\u00eb k\u00ebrkojm\u00eb nj\u00eb zgjidhje n\u00eb internet. N\u00eb lidhje me mbiemrat rus\u00eb nuk ka informacione direkte, por ka pyetje p\u00ebr \u00e7\u00ebshtje t\u00eb tjera t\u00eb \u00e7uditshme n\u00eb renditje. P\u00ebr shembull, ka nj\u00eb problem t\u00eb till\u00eb: <noindex><a rel=\"nofollow\" href=\"https:\/\/serverfault.com\/questions\/95579\/unix-sort-treats-dash-characters-as-invisible\/95593\">unix sort e trajton karakteret &#8216;-&#8216; (viz\u00eb) si t\u00eb paduksh\u00ebm<\/a><\/noindex>. N\u00ebse e shpjegojm\u00eb shkurt, vargjet &quot;a-b&quot;, &quot;aa&quot;, &quot;ac&quot; renditen si &quot;aa&quot;, &quot;a-b&quot;, &quot;ac&quot;.<\/p>\n<p><\/p>\n<p>P\u00ebrgjigja \u00ebsht\u00eb e standardizuar: p\u00ebrdorni lokacionin programues <em>&quot;C&quot;<\/em> dhe do t\u00eb jeni t\u00eb lumtur. Le t\u00eb provojm\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LANG=C sort buhg.txt\n\u0401\u043b\u043a\u0438\u043d\u0430 \u042d\u043b\u043b\u0430;\u043a\u0440\u0430\u043d\u043e\u0432\u0449\u0438\u0446\u0430\n\u0410\u0431\u0430\u043a\u0430\u043d\u043e\u0432 \u041c\u0438\u0445\u0430\u0438\u043b;\u043c\u0430\u043b\u044f\u0440\n\u0418\u0432\u0430\u043d\u043e\u0432 \u0410\u043d\u0434\u0440\u0435\u0439;\u0441\u043b\u0435\u0441\u0430\u0440\u044c\n\u0418\u0432\u0430\u043d\u043e\u0432\u0430 \u0410\u043b\u043b\u0430;\u0430\u0434\u0432okat<\/code><\/pre>\n<p><\/p>\n<p>Di\u00e7ka \u00ebsht\u00eb ndryshuar. Ivan\u00ebt jan\u00eb renditur n\u00eb rendin e duhur, por \u0401lkin\u00eb \u00ebsht\u00eb zhdukur diku. Kthehemi te detyra fillestare:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LANG=C sort buhg.txt &gt; buhg.srt\n$&gt; LANG=C sort mail.txt &gt; mail.srt\n$&gt; LANG=C join buhg.srt mail.srt &gt; result<\/code><\/pre>\n<p><\/p>\n<p>Ka funksionoi pa gabime, si\u00e7 e premtoi interneti. Dhe kjo ndodh pavar\u00ebsisht nga \u0401lkin n\u00eb rreshtin e par\u00eb.<\/p>\n<p><\/p>\n<p>Problemi duket se \u00ebsht\u00eb zgjidhur, por p\u00ebr \u00e7do rast do t\u00eb provojm\u00eb edhe nj\u00eb kodim rus \u2014 at\u00eb t\u00eb Windows. <em>CP1251<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; iconv -f UTF-8 -t CP1251 buhg.txt \n | LANG=ru_RU.CP1251 sort \n | iconv -f CP1251 -t UTF8 <\/code><\/pre>\n<p><\/p>\n<p>Rezultati i renditjes, si\u00e7 duket, do t\u00eb p\u00ebrputhet me lokalitetin <em>&quot;C&quot;<\/em>, dhe t\u00ebr\u00eb shembulli, si\u00e7 duhet, kalon pa gabime. Nj\u00eb lloj misteri.<\/p>\n<p><\/p>\n<p>Nuk m\u00eb p\u00eblqen misteri n\u00eb programim, sepse zakonisht ai fsheh gabime. Do t\u00eb duhet t\u00eb merrem seriozisht me pyetjen se si funksionon <em>sort<\/em> dhe \u00e7far\u00eb ndikon <em>LC_COLLATE<\/em> .<\/p>\n<p><\/p>\n<p>N\u00eb fund do t\u00eb p\u00ebrpiqem t\u00eb p\u00ebrgjigjem n\u00eb pyetje:<\/p>\n<p><\/p>\n<ul>\n<li>pse u rendit\u00ebn gabim mbiemrat fem\u00ebror\u00eb<\/li>\n<li>pse <em>LANG=ru_RU.CP1251<\/em> doli t\u00eb ishte ekuivalent <em>LANG=C<\/em><\/li>\n<li>pse kan\u00eb <em>sort<\/em> dhe <em>join<\/em> p\u00ebrshtypje t\u00eb ndryshme mbi rendin e rreshtave t\u00eb renditur<\/li>\n<li>pse n\u00eb t\u00eb gjitha shembujt e mi ka gabime<\/li>\n<li>n\u00eb fund, si t\u00eb renditen rreshtat sipas d\u00ebshir\u00ebs time<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"sortirovka-v-yunikode\">Renditja n\u00eb Unicode<\/h1>\n<p><\/p>\n<p>Stopi i par\u00eb do t\u00eb jet\u00eb raporti teknik nr. 10 me titull <noindex><a rel=\"nofollow\" href=\"https:\/\/unicode.org\/reports\/tr10\/\">algoritmi i radhitjes s\u00eb Unicode<\/a><\/noindex> n\u00eb faqen <noindex><a rel=\"nofollow\" href=\"https:\/\/unicode.org\">unicode.org<\/a><\/noindex>. Raporti p\u00ebrmban shum\u00eb detaje teknike, prandaj do t\u00eb lejoj veten t\u00eb jap nj\u00eb p\u00ebrmbledhje t\u00eb ideve kryesore.<\/p>\n<p><\/p>\n<p><em>Radhitja<\/em> \u2014 &quot;krahasimi&quot; i vargjeve \u00ebsht\u00eb baza e \u00e7do algoritmi renditjeje. Algoritmet vet\u00eb mund t\u00eb ndryshojn\u00eb (&quot;me\u6ce1&quot;, &quot;me bashkim&quot;, &quot;shpejt\u00eb&quot;), por t\u00eb gjitha do t\u00eb p\u00ebrdorin krahasimin e nj\u00eb \u00e7ifti vargjesh p\u00ebr t\u00eb p\u00ebrcaktuar rendin e tyre.<\/p>\n<p><\/p>\n<p>Renditja e vargjeve n\u00eb gjuh\u00ebn natyrore \u00ebsht\u00eb nj\u00eb problem mjaft i nd complicuar. Edhe n\u00eb kodimet m\u00eb t\u00eb thjeshta me nj\u00eb byte, rendi i shkronjave n\u00eb alfabet, ndonj\u00ebher\u00eb ndryshe nga latinishtja angleze, nuk do t\u00eb p\u00ebrputhet m\u00eb me rendin e vlerave numerike me t\u00eb cilat kodohen k\u00ebto shkronja. K\u00ebshtu, n\u00eb alfabetin gjerman, shkronja <em>\u00d6<\/em> ndodhet midis <em>m\u00eb<\/em> dhe <em>P<\/em>, nd\u00ebrsa n\u00eb kodimin <em>CP850<\/em> ajo ndodhet midis <em>\u00ff<\/em> dhe <em>\u00dc<\/em>.<\/p>\n<p><\/p>\n<p>Mund t\u00eb p\u00ebrpiqemi t\u00eb abstrahojm\u00eb nga kodimi specifik dhe t\u00eb shohim &quot;let\u00ebrsi&quot; ideale, t\u00eb cilat jan\u00eb t\u00eb renditura n\u00eb nj\u00eb rend t\u00eb caktuar, si\u00e7 \u00ebsht\u00eb b\u00ebr\u00eb n\u00eb Unicode. Kodimet <em>UTF8<\/em>, <em>UTF16<\/em> ose nj\u00eb byte <em>KOI8-R<\/em> (n\u00ebse k\u00ebrkohet nj\u00eb n\u00ebngrup i kufizuar i Unicode) do t\u00eb japin p\u00ebrfaq\u00ebsime t\u00eb ndryshme numerike t\u00eb shkronjave, por do t\u00eb referojn\u00eb n\u00eb t\u00eb nj\u00ebjtat elemente t\u00eb tabel\u00ebs baz\u00eb. <\/p>\n<p><\/p>\n<p>T\u00eb rezultoj\u00eb se edhe duke nd\u00ebrtuar nj\u00eb tabel\u00eb simboresh nga e para, nuk do t\u00eb mund t\u00eb caktojm\u00eb nj\u00eb rend t\u00eb p\u00ebrgjithsh\u00ebm p\u00ebr simbolet. N\u00eb alfabetet e ndryshme komb\u00ebtare, q\u00eb p\u00ebrdorin t\u00eb nj\u00ebjtat shkronja, rendi i k\u00ebtyre shkronjave mund t\u00eb ndryshoj\u00eb. P\u00ebr shembull, n\u00eb gjuh\u00ebn fr\u00ebnge, <em>\u00c6<\/em> do t\u00eb konsiderohet si nj\u00eb ligatur\u00eb dhe do t\u00eb renditet si nj\u00eb varg. <em>AE<\/em>N\u00eb gjuh\u00ebn norvegjeze, <em>\u00c6<\/em> do t\u00eb jet\u00eb nj\u00eb shkronj\u00eb e ve\u00e7ant\u00eb, e cila ndodhet pas <em>Z<\/em>. Me sa duket, p\u00ebrve\u00e7 ligaturave t\u00eb tipit <em>\u00c6<\/em> ka edhe shkronja q\u00eb sh\u00ebnohen me disa simbole. K\u00ebshtu, n\u00eb alfabetin \u00e7ek ekziston shkronja <em>Ch<\/em>, e cila ndodhet midis <em>H<\/em> dhe <em>I<\/em>.<\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 ndryshimeve n\u00eb alfabet, ekzistojn\u00eb edhe tradita t\u00eb tjera komb\u00ebtare q\u00eb ndikojn\u00eb n\u00eb renditjen. N\u00eb ve\u00e7anti, lind pyetja: n\u00eb cilin rend duhet t\u00eb ndodhen n\u00eb fjalor fjal\u00ebt q\u00eb p\u00ebrb\u00ebhen nga shkronjat e m\u00ebdha dhe t\u00eb vogla? Gjithashtu, ndikuar n\u00eb renditjen mund t\u00eb jen\u00eb karakteristikat e p\u00ebrdorimit t\u00eb shenjave ndar\u00ebse. N\u00eb gjuh\u00ebn spanjolle n\u00eb fillim t\u00eb nj\u00eb propozimi pyet\u00ebs vendoset nj\u00eb shenj\u00eb pyetjeje e p\u00ebrmbysur (<em>\u00bfTe gusta la m\u00fasica?<\/em>). N\u00eb k\u00ebt\u00eb rast, \u00ebsht\u00eb e qart\u00eb se pyetjet nuk duhet t\u00eb grupohen n\u00eb nj\u00eb klas\u00eb t\u00eb ve\u00e7ant\u00eb jasht\u00eb alfabetit, por si t\u00eb kategorizohen vargjet me shenja t\u00eb tjera pik\u00ebsimi?<\/p>\n<p><\/p>\n<p>Nuk do t\u00eb ndalem n\u00eb renditjen e vargjeve n\u00eb gjuh\u00eb q\u00eb dallohen ndjesh\u00ebm nga ato evropiane. Dua t\u00eb theksoj se n\u00eb gjuh\u00ebt me drejtim shkrimi nga e djathta n\u00eb t\u00eb majt\u00eb ose nga lart posht\u00eb, simbol\u00ebt n\u00eb vargje, zakonisht, ruajn\u00eb rendin sipas leximit, dhe madje n\u00eb shkrimet jo alfabetike ka m\u00ebnyra t\u00eb veta p\u00ebr renditjen karakter p\u00ebr karakter t\u00eb vargjeve. P\u00ebr shembull, hieroglifet mund t\u00eb renditen sipas form\u00ebs s\u00eb tyre (<noindex><a rel=\"nofollow\" href=\"https:\/\/studychinese.ru\/kljuchi\/\">\u00e7el\u00ebsat e hieroglif\u00ebve kinez\u00eb<\/a><\/noindex>) ose sipas shqiptimit. Si duhet t\u00eb renditen emotikon\u00ebt, sinqerisht, nuk e di, por p\u00ebr ta mund t\u00eb shpikim di\u00e7ka.<\/p>\n<p><\/p>\n<p>Baza e karakteristikave t\u00eb p\u00ebrmendura m\u00eb lart jan\u00eb formuluar k\u00ebrkesat kryesore p\u00ebr krahasimin e vargjeve, t\u00eb bazuara n\u00eb tabelat e Unicode:<\/p>\n<p><\/p>\n<ul>\n<li>krahasimi i vargjeve nuk varet nga vendosja e simboleve n\u00eb tabel\u00ebn e kodit;<\/li>\n<li>sekuencat e simboleve q\u00eb formojn\u00eb nj\u00eb simbol t\u00eb vet\u00ebm, kthehen n\u00eb form\u00ebn kanonike (<em>A<\/em> + rrethi i sip\u00ebrm \u00ebsht\u00eb e nj\u00ebjta gj\u00eb me <em>\u00c5<\/em>);<\/li>\n<li>kur krahasimi i fjalive, simboli shqyrtohet n\u00eb kontekstin e fjalive dhe, kur \u00ebsht\u00eb e nevojshme, bashkohet me fqinj\u00ebt n\u00eb nj\u00ebsi krahasimi (<em>Ch<\/em> n\u00eb \u00e7eke) ose ndahet n\u00eb disa (<em>\u00c6<\/em> n\u00eb fr\u00ebngjisht);<\/li>\n<li>t\u00eb gjitha karakteristikat komb\u00ebtare (alfabeti, shkronjat e m\u00ebdha\/t\u00eb vogla, shp\u00ebrndarja e pik\u00ebsimeve, rendi i llojeve t\u00eb shkrimit) duhet t\u00eb konfigurohen deri n\u00eb caktimin manual t\u00eb rendit (emoji);<\/li>\n<li>krahasimi \u00ebsht\u00eb i r\u00ebnd\u00ebsish\u00ebm jo vet\u00ebm p\u00ebr renditje, por edhe n\u00eb shum\u00eb vende t\u00eb tjera, p\u00ebr shembull p\u00ebr p\u00ebrcaktimin e intervaleve t\u00eb fjalive (z\u00ebvend\u00ebsimi {A\u2026 \u044f} n\u00eb <em>bash<\/em>);<\/li>\n<li>krahasimi duhet t\u00eb kryhet mjaft shpejt.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, autor\u00ebt e raportit formuluan pronat e krahasimit, p\u00ebr t\u00eb cilat zhvilluesit e algoritmit nuk duhet t\u00eb mb\u00ebshteten:<\/p>\n<p><\/p>\n<ul>\n<li>algoritmi i krahasimit nuk duhet t\u00eb k\u00ebrkoj\u00eb nj\u00eb grup t\u00eb ve\u00e7ant\u00eb simboresh p\u00ebr secil\u00ebn gjuh\u00eb (gjuha ruse dhe ukrainase p\u00ebrdorin s\u00eb bashku shumic\u00ebn e simboleve t\u00eb cirilik\u00ebs);<\/li>\n<li>krahasimi nuk duhet t\u00eb mb\u00ebshtetet n\u00eb rendin e simboleve n\u00eb tabelat Unicode;<\/li>\n<li>pesha e fjalise nuk duhet t\u00eb jet\u00eb nj\u00eb atribut i fjalise, pasi e nj\u00ebjta fjali n\u00eb kontekste kulturore t\u00eb ndryshme mund t\u00eb ket\u00eb pesha t\u00eb ndryshme;<\/li>\n<li>peshat e rreshtave mund t\u00eb ndryshoj\u00eb gjat\u00eb bashkimit ose ndarjes (nga <em>x<\/em> &lt; <em>y<\/em> nuk do t\u00eb thot\u00eb se <em>xz<\/em> &lt; <em>yz<\/em>);<\/li>\n<li>stringjet e ndryshme q\u00eb kan\u00eb pesh\u00eb t\u00eb nj\u00ebjt\u00eb, konsiderohen t\u00eb barabarta nga pik\u00ebpamja e algoritmit t\u00eb renditjes. Futja e nj\u00eb renditje shtes\u00eb t\u00eb k\u00ebtyre rreshtave \u00ebsht\u00eb e mundur, por mund t\u00eb p\u00ebrkeq\u00ebsoj\u00eb performanc\u00ebn;<\/li>\n<li>n\u00eb renditjet e p\u00ebrs\u00ebritura, rreshtat me pesh\u00eb t\u00eb nj\u00ebjt\u00eb mund t\u00eb nd\u00ebrrohen. Q\u00ebndrueshm\u00ebria \u00ebsht\u00eb nj\u00eb pron\u00eb e ve\u00e7ant\u00eb e algoritmit t\u00eb renditjes, dhe jo nj\u00eb pron\u00eb e algoritmit t\u00eb krahasimit t\u00eb rreshtave (shih pik\u00ebn e m\u00ebparshme);<\/li>\n<li>rregullat e renditjes mund t\u00eb ndryshojn\u00eb me kalimin e koh\u00ebs n\u00eb p\u00ebrputhje me sakt\u00ebsimin\/ndryshimin e traditave kulturore.<\/li>\n<\/ul>\n<p><\/p>\n<p>Po ashtu \u00ebsht\u00eb sqaruar se algoritmi i krahasimit nuk di asgj\u00eb p\u00ebr semantik\u00ebn e rreshtave q\u00eb p\u00ebrpunohen. K\u00ebshtu, rreshtat q\u00eb p\u00ebrb\u00ebhen vet\u00ebm nga numra nuk duhet t\u00eb krahasohen si numra, dhe n\u00eb listat e emrave n\u00eb anglisht nuk duhet t\u00eb hiqet artikulli (<em>Beatles, The<\/em>).<\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb p\u00ebrmbushur t\u00eb gjitha k\u00ebrkesat e p\u00ebrmendura, \u00ebsht\u00eb propozuar nj\u00eb algorit\u00ebm rendit\u00ebs me shum\u00eb nivele (n\u00eb fakt, kat\u00ebr nivele).<\/p>\n<p><\/p>\n<p>Fillimisht, karakteret n\u00eb varg konvertohen n\u00eb form\u00ebn kanonike dhe grupohen n\u00eb nj\u00ebsit\u00eb e krahasimit. \u00c7do nj\u00ebsit\u00eb e krahasimit i atribuohen disa peshash, q\u00eb i korrespondojn\u00eb disa niveleve t\u00eb krahasimit. Peshat e nj\u00ebsive t\u00eb krahasimit jan\u00eb elemente t\u00eb grupeve t\u00eb renditur, q\u00eb mund t\u00eb krahasohen p\u00ebr m\u00eb shum\u00eb-pak. Vlera speciale <em>IGNORED<\/em> (0x0) do t\u00eb thot\u00eb se n\u00eb nivelin p\u00ebrkat\u00ebs t\u00eb krahasimit, kjo nj\u00ebsit\u00eb nuk merr pjes\u00eb n\u00eb krahasim. Krahasimi i vargjeve mund t\u00eb p\u00ebrs\u00ebritet disa her\u00eb, me p\u00ebrdorimin e peshave p\u00ebrkat\u00ebse t\u00eb niveleve. N\u00eb \u00e7do nivel, peshat e nj\u00ebsive t\u00eb krahasimit t\u00eb dy vargjeve krahasohen radhazi me nj\u00ebri-tjetrin.<\/p>\n<p><\/p>\n<p>N\u00eb realizime t\u00eb ndryshme t\u00eb algoritmit p\u00ebr tradita t\u00eb ndryshme komb\u00ebtare, vlerat e koeficient\u00ebve mund t\u00eb ndryshojn\u00eb, por n\u00eb standardin Unicode \u00ebsht\u00eb p\u00ebrfshir\u00eb tabela themelore e peshave \u2014 <em>&quot;Default Unicode Collation Element Table&quot;<\/em> (<em>DUCET<\/em>). D\u00ebshiroj t\u00eb theksoj se vendosja e variablit <em>LC_COLLATE<\/em> n\u00eb fakt \u00ebsht\u00eb nj\u00eb tregues p\u00ebr zgjedhjen e tabel\u00ebs s\u00eb peshave n\u00eb funksionin e krahasimit t\u00eb vargjeve.<\/p>\n<p><\/p>\n<p>Koeficient\u00ebt e peshave <em>DUCET<\/em> jan\u00eb organizuar n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>n\u00eb nivelin e par\u00eb, t\u00eb gjitha shkronjat \u00e7ohen n\u00eb nj\u00eb regjist\u00ebr, shenjat diakritike p\u00ebrjashtohen, shenjat e pik\u00ebsimit (jo t\u00eb gjitha) injorohen;<\/li>\n<li>n\u00eb nivelin e dyt\u00eb, merren parasysh vet\u00ebm shenjat diakritike;<\/li>\n<li>n\u00eb nivelin e tret\u00eb, merret parasysh vet\u00ebm regjistri;<\/li>\n<li>n\u00eb nivelin e kat\u00ebrt, merren parasysh vet\u00ebm shenjat e pik\u00ebsimit.<\/li>\n<\/ul>\n<p><\/p>\n<p>Krahasimi ndodh n\u00eb disa kalime: fillimisht krahasohen pesha e nivelit t\u00eb par\u00eb; n\u00ebse peshat p\u00ebrputhen, ndodh nj\u00eb krahasim i p\u00ebrs\u00ebritur me peshat e nivelit t\u00eb dyt\u00eb; pastaj, ndoshta p\u00ebr nivelin e tret\u00eb dhe t\u00eb kat\u00ebrt.<\/p>\n<p><\/p>\n<p>Krahasimi p\u00ebrfundon kur n\u00eb vargje ka nj\u00ebsit\u00eb e krahasimit q\u00eb p\u00ebrputhen me pesha t\u00eb ndryshme. Vargjet q\u00eb kan\u00eb pesa t\u00eb barabarta n\u00eb t\u00eb kat\u00ebr nivelet konsiderohen t\u00eb barabarta me nj\u00ebra-tjetr\u00ebn.<\/p>\n<p><\/p>\n<p>Ky algorit\u00ebm (me shum\u00eb detaje teknike shtes\u00eb) i dha emrin raportit nr. 10 \u2014 <em>&quot;Unicode Collation Algorithm&quot;<\/em> (<em>UCA<\/em>).<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb pik\u00eb, sjellja e renditjes nga shembulli yn\u00eb b\u00ebhet pak m\u00eb e qart\u00eb. Do t\u00eb ishte mir\u00eb ta krahasosh me standardin e Unicode.<\/p>\n<p><\/p>\n<p>P\u00ebr testimin e realizimeve <em>UCA<\/em> ekziston nj\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.unicode.org\/Public\/UCA\/latest\/CollationTest.html\">test<\/a><\/noindex>, q\u00eb p\u00ebrdor <noindex><a rel=\"nofollow\" href=\"http:\/\/www.unicode.org\/Public\/UCA\/latest\/allkeys.txt\">skedarin e peshave<\/a><\/noindex>, implementues <em>DUCET<\/em>. N\u00eb skedarin e peshojve mund t\u00eb gjeni gj\u00ebra t\u00eb ndryshme arg\u00ebtuese. P\u00ebr shembull, aty ka rendin e lugezve t\u00eb Mahjong-ut dhe domino-s evropian, si dhe rendin e mastave n\u00eb nj\u00eb dek kartash (simbol <em>1F000<\/em> dhe m\u00eb tej). Mastat e kartave jan\u00eb vendosur sipas rregullave t\u00eb bridge-it \u2014 P\u00c7BT, dhe kartat n\u00eb mast\u00eb \u2014 n\u00eb rendin 2, 3\u2026 K.<\/p>\n<p><\/p>\n<p>Kontrolli manual i sakt\u00ebsis\u00eb s\u00eb renditjes s\u00eb rreshtave sipas <em>DUCET<\/em> do t\u00eb ishte mjaft e lodhshme, por fatmir\u00ebsisht p\u00ebr ne, ekziston nj\u00eb p\u00ebrfaq\u00ebsim model i bibliotek\u00ebs p\u00ebr pun\u00eb me Unicode \u2014 &quot;<noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">Komponent\u00ebt Nd\u00ebrkomb\u00ebtar\u00eb p\u00ebr Unicode<\/a><\/noindex>&quot; (<em>ICU<\/em>).<\/p>\n<p><\/p>\n<p>N\u00eb faqen e k\u00ebsaj biblioteke, e zhvilluar n\u00eb <em>IBM<\/em>, ka faqe demonstrimi, p\u00ebrfshir\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/demo.icu-project.org\/icu-bin\/collation.html\">faqen e algoritmit t\u00eb krahasimit t\u00eb rreshtave<\/a><\/noindex>. Futim rreshtat tan\u00eb t\u00eb testit me cil\u00ebsimet e paracaktuara dhe, oh mrekulli, marrim renditjen perfekte shqiptare.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Abakanov Mihail;piktor\nJolkina Ella;grua kran\nIvanov Andrej;pjes\u00eb e hekurudhave\nIvanova Alla;avokat<\/code><\/pre>\n<p><\/p>\n<p>Dhe p\u00ebr m\u00eb tep\u00ebr, n\u00eb faqen e <em>ICU<\/em> mund t\u00eb gjeni sqarimin e pun\u00ebs s\u00eb algoritmit t\u00eb krahasimit kur trajtoni shenjat e pik\u00ebsimit. N\u00eb shembujt <noindex><a rel=\"nofollow\" href=\"http:\/\/userguide.icu-project.org\/collation\/faq\">FAQ p\u00ebr Vendosjen<\/a><\/noindex> ignorohen apostrofi dhe hifeni.<\/p>\n<p><\/p>\n<p>Unicode na ndihmoi, por do t\u00eb duhet t\u00eb k\u00ebrkojm\u00eb arsyet e sjelljes s\u00eb \u00e7uditshme <em>sort<\/em> n\u00eb <em>Linux<\/em> ndonj\u00ebher\u00eb diku tjet\u00ebr.<\/p>\n<p><\/p>\n<h1 id=\"sortirovka-v-glibc\">Renditja n\u00eb glibc<\/h1>\n<p><\/p>\n<p>Pamja e shpejt\u00eb e kodit burimor t\u00eb utilitarit <em>sort<\/em> nga <em>GNU Core Utils<\/em> tregon se n\u00eb utilitar vet\u00eb, lokalizimi p\u00ebrfshin printimin e vler\u00ebs aktuale t\u00eb variablit <em>LC_COLLATE<\/em> kur ekzekutohet n\u00eb modalitetin e rregullimit:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sort --debug buhg.txt &gt; buhg.srt\nsort: duke p\u00ebrdorur rregullat p\u00ebr renditjen \u2018en_US.UTF8\u2019<\/code><\/pre>\n<p><\/p>\n<p>Krahason stringjet duke p\u00ebrdorur funksionin standard <em>strcoll<\/em>, dhe k\u00ebshtu \u00e7do gj\u00eb interesante ndodhet n\u00eb bibliotek\u00eb <em>glibc<\/em>.<\/p>\n<p><\/p>\n<p>N\u00eb <em>wiki<\/em> projekti <em>glibc<\/em> m\u00ebnyr\u00ebs p\u00ebr krah\u00ebzim stringjesh <noindex><a rel=\"nofollow\" href=\"https:\/\/sourceware.org\/glibc\/wiki\/Locales#LC_COLLATE\">i \u00ebsht\u00eb dedikuar nj\u00eb paragraf<\/a><\/noindex>. Nga ky paragraf mund t\u00eb kuptohet se <em>glibc<\/em> renditja \u00ebsht\u00eb e bazuar n\u00eb algoritmin q\u00eb tashm\u00eb e njohim <em>UCA<\/em> (<em>The Unicode collation algorithm<\/em>) dhe\/ose n\u00eb nj\u00eb standard t\u00eb ngjash\u00ebm <em>ISO 14651<\/em> (<em>Renditja dhe krahasimi nd\u00ebrkomb\u00ebtar i stringjeve<\/em>). Sa i p\u00ebrket k\u00ebtij standarti, duhet v\u00ebn\u00eb n\u00eb dukje se n\u00eb faqen <noindex><a rel=\"nofollow\" href=\"https:\/\/standards.iso.org\/ittf\/PubliclyAvailableStandards\">standards.iso.org<\/a><\/noindex> <em>ISO 14651<\/em> \u00ebsht\u00eb shpallur publikisht, por lidhja p\u00ebrkat\u00ebse \u00e7on n\u00eb nj\u00eb faqe q\u00eb nuk ekziston. Google jep disa faqe me lidhje p\u00ebr faqet zyrtare q\u00eb ofrojn\u00eb t\u00eb blejn\u00eb nj\u00eb kopje elektronike t\u00eb standardit p\u00ebr nj\u00ebqind euro, por n\u00eb faqen e tret\u00eb-kat\u00ebrt t\u00eb artikujve t\u00eb k\u00ebrkimit mund t\u00eb gjenden edhe lidhje t\u00eb drejtp\u00ebrdrejta p\u00ebr <em>PDF<\/em>. N\u00eb p\u00ebrgjith\u00ebsi, standardi nuk ndryshon shum\u00eb nga <em>UCA<\/em>, por lexohet m\u00eb monoton, pasi nuk p\u00ebrmban shembuj t\u00eb ndritsh\u00ebm t\u00eb ve\u00e7orive komb\u00ebtare t\u00eb renditjes s\u00eb stringjeve. <\/p>\n<p><\/p>\n<p>Informacioni m\u00eb i r\u00ebnd\u00ebsish\u00ebm n\u00eb <em>wiki<\/em> ishte lidhja te <noindex><a rel=\"nofollow\" href=\"https:\/\/sourceware.org\/bugzilla\/show_bug.cgi?id=14095\">bagracker<\/a><\/noindex> me diskutimin mbi implementimin e krahasimit t\u00eb vargjeve n\u00eb <em>glibc<\/em>. Nga diskutimi mund t\u00eb kuptohet se n\u00eb <em>glibc<\/em> p\u00ebrdoret <em>ISO<\/em>tabela vizuale <noindex><a rel=\"nofollow\" href=\"http:\/\/www.iso.org\/ittf\/ISO14651_2006_TABLE1_en.txt\">Tabela e P\u00ebrbashk\u00ebt e Template-ve<\/a><\/noindex> (<em>CTT<\/em>), adresa e s\u00eb cil\u00ebs mund t\u00eb gjendet n\u00eb aplikacionin <em>A<\/em> standardit <em>ISO 14651<\/em>. Nd\u00ebrmjet viteve 2000 dhe 2015, kjo tabel\u00eb n\u00eb <em>glibc<\/em> nuk kishte mbik\u00ebqyr\u00ebs dhe ndryshonte shum\u00eb (t\u00eb pakt\u00ebn n\u00eb pamje) nga versi aktuale e standardit. Nga 2015 deri n\u00eb 2018, ishte n\u00eb proces adaptimi me versionin e ri t\u00eb tabel\u00ebs dhe tanim\u00eb keni mund\u00ebsin\u00eb t\u00eb takoni n\u00eb jet\u00eb reale si versionin e ri t\u00eb tabel\u00ebs (<em>CentOS 8<\/em>), ashtu edhe versionin e vjet\u00ebr (<em>CentOS 7<\/em>). <\/p>\n<p><\/p>\n<p>Tani, kur kemi t\u00eb gjitha informacionet mbi algoritmin dhe tabelat ndihm\u00ebse, mund t\u00eb kthehemi te problemi fillestar dhe t\u00eb kuptojm\u00eb se si t\u00eb renditim sakt\u00ebsisht vargjet n\u00eb lokalizimin rus.<\/p>\n<p><\/p>\n<h1 id=\"iso-1465114652\">ISO 14651\/14652<\/h1>\n<p><\/p>\n<p>Kodi burimor i tabel\u00ebs q\u00eb na intereson <em>CTT<\/em> n\u00eb shumic\u00ebn e distribucioneve <em>Linux<\/em> ndodhet n\u00eb katalogun <em>\/usr\/share\/i18n\/locales\/<\/em>. Tabela vet\u00eb ndodhet n\u00eb skedarin <em>iso14651_t1_common<\/em>. M\u00eb pas, ky skedar p\u00ebrfshihet me direktiv\u00ebn <em>copy iso14651_t1_common<\/em> n\u00eb skedarin <em>iso14651_t1<\/em>, i cili, nga ana e tij, p\u00ebrfshihet n\u00eb skedar\u00ebt komb\u00ebtar\u00eb, p\u00ebrfshir\u00eb n\u00eb <em>en_US<\/em> dhe <em>ru_RU<\/em>. N\u00eb shumic\u00ebn e distribucioneve <em>Linux<\/em> t\u00eb gjitha skedar\u00ebt burimor\u00eb jan\u00eb p\u00ebrfshir\u00eb n\u00eb instalimin bazik, por n\u00ebse ato nuk jan\u00eb aty, do t\u00eb duhet t\u00eb instaloni nj\u00eb paket\u00eb shtes\u00eb nga distribuimi.<\/p>\n<p><\/p>\n<p>Struktura e skedarit <em>iso14651_t1<\/em> mund t\u00eb duket tmerr\u00ebsisht e zgjatur, me rregulla nd\u00ebrtimi emrash q\u00eb nuk jan\u00eb t\u00eb qarta, por n\u00ebse merresh me t\u00eb, \u00ebsht\u00eb mjaft e thjesht\u00eb. Struktur\u00ebn e p\u00ebrshkruan standardi <em>ISO 14652<\/em>, nj\u00eb kopje e t\u00eb cilit mund t\u00eb shkarkohet nga uebsajti <noindex><a rel=\"nofollow\" href=\"http:\/\/www.open-std.org\/JTC1\/SC22\/WG20\/docs\/n972-14652ft.pdf\">open-std.org<\/a><\/noindex>. Nj\u00eb p\u00ebrshkrim tjet\u00ebr t\u00eb formatit t\u00eb skedarit mund t\u00eb lexoni n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/pubs.opengroup.org\/onlinepubs\/9699919799\/basedefs\/V1_chap07.html\">specifikimet<\/a><\/noindex> <em>POSIX<\/em> nga <em>OpenGroup<\/em>. Si nj\u00eb alternativ\u00eb p\u00ebr t\u00eb lexuar standardin, mund t\u00eb studiohen skedar\u00ebt burimor\u00eb t\u00eb funksionit <em>collate_read<\/em> n\u00eb <em>glibc\/locale\/programs\/ld-collate.c<\/em>.<\/p>\n<p><\/p>\n<p>Struktura e skedarit duket si m\u00eb posht\u00eb:<\/p>\n<p><\/p>\n<p>N\u00eb parazgjedhje, simboli \\ p\u00ebrdoret si simbol i shnd\u00ebrrimit, dhe fundi i rreshtit pas simbolit # \u00ebsht\u00eb nj\u00eb komente. T\u00eb dy simbol\u00ebt mund t\u00eb rishkruhen, ashtu si\u00e7 \u00ebsht\u00eb b\u00ebr\u00eb n\u00eb versionin e ri t\u00eb tabel\u00ebs:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">escape_char \/\\ncomment_char %<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb skedar do t\u00eb shfaqen token\u00eb n\u00eb formatin <em>&lt;Uxxxx&gt;<\/em> ose <em>&lt;Uxxxxxxxx&gt;<\/em> (ku <em>x<\/em> \u2013 shif\u00ebr hex). Ky \u00ebsht\u00eb p\u00ebrfaq\u00ebsimi hex i pikave t\u00eb kodit Unicode n\u00eb kodimin <em>UCS-4<\/em> (<em>UTF-32<\/em>). Element\u00ebt e tjer\u00eb n\u00eb k\u00ebndoret (p\u00ebrfshir\u00eb <em>&lt;Uxxxx_xxxx&gt;<\/em>, <em>&lt;2&gt;<\/em> dhe t\u00eb ngjashme), konsiderohen si konstante stringu t\u00eb thjeshta, pa ndonj\u00eb kuptim t\u00eb ve\u00e7ant\u00eb jasht\u00eb kontekstit.<\/p>\n<p><\/p>\n<p>Vargu <em>LC_COLLATE<\/em> na tregon se m\u00eb pas fillojn\u00eb t\u00eb dh\u00ebnat q\u00eb p\u00ebrshkruajn\u00eb krahasimin e stringjeve.<\/p>\n<p><\/p>\n<p>S\u00eb pari vendosen emrat p\u00ebr peshat n\u00eb tabel\u00ebn e krahasimit dhe emrat p\u00ebr kombinimet e simboleve. N\u00eb p\u00ebrgjith\u00ebsi, dy tipa emrash i p\u00ebrkasin dy entiteteve t\u00eb ndryshme, por n\u00eb skedarin real ato jan\u00eb t\u00eb p\u00ebrziera. Emrat e peshave vendosen me fjal\u00ebn ky\u00e7e <em>collating-symbol<\/em> (simboli i krahasimit), pasi gjat\u00eb krahasimit simbolet Unicode q\u00eb kan\u00eb t\u00eb nj\u00ebjtat pesha do t\u00eb konsiderohen simbole ekuivalente.<\/p>\n<p><\/p>\n<p>Gjat\u00ebsia e p\u00ebrgjithshme e seksionit n\u00eb revizionin aktual t\u00eb skedarit \u00ebsht\u00eb rreth 900 rreshta. Kam marr\u00eb shembuj nga disa vende p\u00ebr t\u00eb treguar rast\u00ebsin\u00eb e emrave dhe disa lloje sintaks\u00eb.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">LC_COLLATE\n\ncollating-symbol &lt;RES-1&gt;\ncollating-symbol &lt;BLK&gt;\ncollating-symbol &lt;MIN&gt;\ncollating-symbol &lt;WIDE&gt;\n...\ncollating-symbol &lt;ARABIC&gt;\ncollating-symbol &lt;ETHPC&gt;\ncollating-symbol &lt;OSMANYA&gt;\n...\ncollating-symbol &lt;S1D000&gt;..&lt;S1D35F&gt;\ncollating-symbol &lt;SFFFF&gt; % Vlera m\u00eb e madhe e garantuar e simbolit. Mbani n\u00eb fund t\u00eb k\u00ebsaj liste\n...\ncollating-element &lt;U0413_0301&gt; nga &quot;&lt;U0413&gt;&lt;U0301&gt;&quot;\ncollating-element &lt;U0413_0341&gt; nga &quot;&lt;U0413&gt;&lt;U0341&gt;&quot;<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><em>collating-symbol<\/em> regjistron nj\u00eb varg <em>OSMANYA<\/em> n\u00eb tabel\u00ebn e emrave t\u00eb peshave <\/li>\n<li><em>collating-symbol ..<\/em> regjistron nj\u00eb sekuenc\u00eb emrash q\u00eb p\u00ebrb\u00ebhet nga prefiksi <em>S<\/em> dhe nj\u00eb sufiks numerik t\u00eb gjasht\u00ebmb\u00ebdhjet\u00eb nga <em>1D000<\/em> deri te <em>1D35F<\/em>.<\/li>\n<li><em>FFFF<\/em> n\u00eb <em>simboli i kollatimit<\/em> duket si nj\u00eb num\u00ebr t\u00eb madh pa shenj\u00eb n\u00eb sistemin e numrave t\u00eb gjasht\u00ebmb\u00ebdhjet\u00eb, por <em>&lt;SFFFF&gt;<\/em> \u00ebsht\u00eb thjesht nj\u00eb em\u00ebr q\u00eb mund t\u00eb duket si <em>&lt;VERYBIGVAL&gt;<\/em> <\/li>\n<li>emri <em>&lt;U0413&gt;<\/em> n\u00ebnkupton nj\u00eb pik\u00eb kodi n\u00eb kodimin <em>UCS-4<\/em><\/li>\n<li><em>collating-element &lt;U0413_0301&gt; nga &quot;&lt;U0413&gt;&lt;U0301&gt;&quot;<\/em> regjistron nj\u00eb em\u00ebr t\u00eb ri p\u00ebr nj\u00eb \u00e7ift pikash unicode. <\/li>\n<\/ul>\n<p><\/p>\n<p>Kur emrat e peshave jan\u00eb p\u00ebrcaktuar, caktohen vet\u00eb peshat. Duke qen\u00eb se n\u00eb krahasim ka r\u00ebnd\u00ebsi vet\u00ebm marr\u00ebdh\u00ebnia m\u00eb-shum\u00eb, m\u00eb-pak, peshat p\u00ebrcaktohen me nj\u00eb rend t\u00eb thjesht\u00eb t\u00eb list\u00ebs. Fillimisht renditen pesha m\u00eb &quot;e leht\u00eb&quot;, pastaj m\u00eb &quot;e r\u00ebnd\u00eb&quot;. T\u00eb kujtojm\u00eb se \u00e7do simbol unicode merr kat\u00ebr peshat e ndryshme. K\u00ebtu ato jan\u00eb p\u00ebrmbledhur n\u00eb nj\u00eb rend t\u00eb vet\u00ebm. N\u00eb teori, \u00e7do em\u00ebr simbolik mund t\u00eb p\u00ebrdoret n\u00eb t\u00eb kat\u00ebr nivelet, por komentet tregojn\u00eb se zhvilluesit psikoja ndajn\u00eb emrat sipas niveleve.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">% Peshatja simbolike\n\n% Peshatja e nivelit t\u00eb tret\u00eb\n\n\n\n\n...\n% Peshatja e nivelit t\u00eb dyt\u00eb\n\n % KOMBI N\u00cb RAJON\n % KOMBI ME SIP\u00cbR\n % KOMBI ME P\u00cbRBRASHT\n...\n% Peshatja e nivelit t\u00eb par\u00eb\n % TABULIM HORIZONTAL\n % KALIMI N\u00cb RRESHT\n % TABULIM VERTIKAL\n...\n % LETRA E SMAL PARAFOLIT T\u00cb CIRILIC\u00cbS\n % LETRA E SMAL KOMI DE\n % LETRA E SMAL DJE\n % LETRA E SMAL KOMI DJE\n % LETRA E SMAL GJE\n % LETRA E SMAL ZE ME ZBRESJE\n % LETRA E SMAL IE\n % LETRA E SMAL IE ME BREVE\n % LETRA E SMAL IE UKRAINIAN\n % LETRA E SMAL ZHE<\/code><\/pre>\n<p><\/p>\n<p>M\u00eb n\u00eb fund, tabela e vet\u00eb peshave.<\/p>\n<p><\/p>\n<p>Sekcioni i peshave \u00ebsht\u00eb i mbyllur n\u00eb rreshta me fjal\u00eb ky\u00e7e <em>order_start<\/em> dhe <em>order_end<\/em>. Parametrat shtes\u00eb <em>order_start<\/em> shprehin n\u00eb cilin drejtim rreshtat shikohen n\u00eb \u00e7do nivel krahasimi. N\u00eb m\u00ebnyr\u00eb t\u00eb parazgjedhur, p\u00ebrdoret parametri <em>p\u00ebrpara<\/em>. Trupi i seksionit p\u00ebrb\u00ebhet nga rreshta q\u00eb p\u00ebrmbajn\u00eb kodin e simbolit dhe kat\u00ebr peshat e tij. Kodi i simbolit mund t\u00eb paraqitet si vet\u00eb simboli, pika kodi ose emri simbolik i p\u00ebrcaktuar m\u00eb par\u00eb. Peshat gjithashtu mund t\u00eb p\u00ebrcaktohen nga emra simbolik\u00eb, pika kodi ose vet\u00eb simbolat. N\u00ebse p\u00ebrdoren pika kodi ose simbolat, pesha e tyre p\u00ebrputhet me vler\u00ebn numerike t\u00eb pik\u00ebs s\u00eb kodit (pozita n\u00eb tabel\u00ebn e Unicode). Simbolat e pap\u00ebrshtatur (sip\u00ebrfaq\u00ebsisht) merren si t\u00eb aneksuar n\u00eb tabel\u00eb me pesh\u00eb primare q\u00eb p\u00ebrputhet me pozit\u00ebn n\u00eb tabel\u00ebn e Unicode. Vlera speciale e pesh\u00ebs <em>IGNORE<\/em> do t\u00eb thot\u00eb se n\u00eb nivelin e krahasimit p\u00ebrkat\u00ebs, ky simbol injorohet.<\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb demonstruar struktur\u00ebn e peshave, kam zgjedhur tri fragmente mjaft t\u00eb dukshme:<\/p>\n<p><\/p>\n<ul>\n<li>simbolat q\u00eb injorohen plot\u00ebsisht<\/li>\n<li>simbolat ekuivalente me numrin tre n\u00eb dy nivelet e para<\/li>\n<li>fillimi i alfabetit cirilik, i cili nuk p\u00ebrmban shenja diakritike, dhe p\u00ebr k\u00ebt\u00eb arsye renditet, kryesisht, sipas niveleve t\u00eb para dhe t\u00eb treta.<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"plaintext\">order_start forward;forward;forward;forward,position\n IGNORE;IGNORE;IGNORE;IGNORE % NULL (in 6429)\n IGNORE;IGNORE;IGNORE;IGNORE % START OF HEADING (in 6429)\n IGNORE;IGNORE;IGNORE;IGNORE % START OF TEXT (in 6429)\n...\n ;;; % DIGIT THREE\n ;;; % FULLWIDTH DIGIT THREE\n ;;; % PARENTHESIZED DIGIT THREE\n ;;; % DIGIT THREE FULL STOP\n ;;<FONT>; % MATHEMATICAL BOLD DIGIT THREE\n...\n ;;; % CYRILLIC SMALL LETTER A\n ;;; % CYRILLIC CAPITAL LETTER A\n ;;; % CYRILLIC SMALL LETTER A WITH BREVE\n ;;; % CYRILLIC SMALL LETTER A WITH BREVE\n...\n ;;; % CYRILLIC SMALL LETTER BE\n ;;; % CYRILLIC CAPITAL LETTER BE\n ;;; % CYRILLIC SMALL LETTER VE\n ;;; % CYRILLIC CAPITAL LETTER VE\n...\norder_end<\/code><\/pre>\n<p><\/p>\n<p>Tani tani, mund t\u00eb ktheheni p\u00ebrs\u00ebri n\u00eb renditjen e shembujve nga fillimi i artikullit. Problemi fshihet k\u00ebtu n\u00eb k\u00ebt\u00eb pjes\u00eb t\u00eb tabel\u00ebs s\u00eb peshave:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">IGNORE;IGNORE;IGNORE; % SPACE\n IGNORE;IGNORE;IGNORE; % EXCLAMATION MARK\n IGNORE;IGNORE;IGNORE; % QUOTATION MARK\n...<\/code><\/pre>\n<p><\/p>\n<p>Duket se n\u00eb k\u00ebt\u00eb tabel\u00eb shenjat e pik\u00ebsimit jan\u00eb t\u00eb dukshme nga tabela <em>ASCII<\/em> (duke p\u00ebrfshir\u00eb hap\u00ebsirat) gjat\u00eb krahasimit t\u00eb vargjeve zakonisht injorohen. P\u00ebrjashtim p\u00ebrb\u00ebjn\u00eb vet\u00ebm vargjet q\u00eb p\u00ebrputhen plot\u00ebsisht, p\u00ebrve\u00e7 shenjave t\u00eb pik\u00ebsimit q\u00eb ndodhen n\u00eb pozitat p\u00ebrputh\u00ebse. Vargjet nga shembulli im (pas renditjes) p\u00ebr algoritmin e krahasimit duken k\u00ebshtu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">AbakanovMikhailpiktor\nJolkinaEllaekranist\nIvanovaAllamalyr\nIvanovAndreyekripar<\/code><\/pre>\n<p><\/p>\n<p>Duke marr\u00eb parasysh se n\u00eb tabel\u00ebn e pesheve shkronjat e m\u00ebdha n\u00eb gjuh\u00ebn ruse vijn\u00eb pas atyre t\u00eb vogla (n\u00eb nivelin e tret\u00eb <em>&lt;CAP&gt;<\/em> m\u00eb t\u00eb r\u91cd <em>&lt;MIN&gt;<\/em>), renditja duket krejt\u00ebsisht e sakt\u00eb.<\/p>\n<p><\/p>\n<p>Kur vendoset variabli <em>LC_COLLATE=C<\/em> ngarkohet nj\u00eb tabel\u00eb speciale, e cila p\u00ebrcakton krahasimin byte p\u00ebr byte<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">static const uint32_t collseqwc[] =\n{\n  8, 1, 8, 0x0, 0xff,\n  \/* tabela e par\u00eb-nivel *\/\n  6 * sizeof (uint32_t),\n  \/* tabela e dyta-nivel *\/\n  7 * sizeof (uint32_t),\n  \/* tabela e tret\u00eb-nivel *\/\n  L'x00', L'x01', L'x02', L'x03', L'x04', L'x05', L'x06', L'x07',\n  L'x08', L'x09', L'x0a', L'x0b', L'x0c', L'x0d', L'x0e', L'x0f',\n\n...\n  L'xf8', L'xf9', L'xfa', L'xfb', L'xfc', L'xfd', L'xfe', L'xff'\n};<\/code><\/pre>\n<p><\/p>\n<p>Duke marr\u00eb parasysh q\u00eb n\u00eb Unicode pika e kodit \u0401 \u00ebsht\u00eb para A, vargjet renditen p\u00ebrkat\u00ebsisht.<\/p>\n<p><\/p>\n<h1 id=\"tekstovye-i-dvoichnye-tablicy\">Tabelat tekstuale dhe binare<\/h1>\n<p><\/p>\n<p>\u00c8 e dukshme se krahasimi i vargjeve \u00ebsht\u00eb nj\u00eb operacion shum\u00eb i zakonsh\u00ebm, nd\u00ebrsa analiza e tabelave <em>CTT<\/em> \u00ebsht\u00eb nj\u00eb procedur\u00eb mjaft e shtrenjt\u00eb. P\u00ebr optimizimin e qasjes n\u00eb tabel\u00eb, ajo kompilizohet n\u00eb form\u00eb binar nga komanda <em>localedef<\/em>.<\/p>\n<p><\/p>\n<p>Ekipa <em>localedef<\/em> e cila pranon si parametra nj\u00eb skedar me tabel\u00ebn e ve\u00e7orive komb\u00ebtar (opsioni <em>-i<\/em>), ku t\u00eb gjitha simbolet paraqiten si pika Unicode, dhe nj\u00eb skedar p\u00ebrputhjeje t\u00eb pikave Unicode me simbolet e kodimit t\u00eb caktuar (opsioni <em>-f<\/em>). Si rezultat i pun\u00ebs krijohen skedar\u00eb binar\u00eb p\u00ebr lokalitetin, me emrin e specifikuar n\u00eb parametrin e fundit.<\/p>\n<p><\/p>\n<p><em>Glibc<\/em> mb\u00ebshtet dy formate t\u00eb skedave binare: &quot;tradicional&quot; dhe &quot;modern&quot;.<\/p>\n<p><\/p>\n<p>Formati tradicional n\u00ebnkupton q\u00eb emri i lokalitetit \u00ebsht\u00eb emri i nj\u00eb n\u00ebnkatalogu n\u00eb <em>\/usr\/lib\/locale\/<\/em>. N\u00eb k\u00ebt\u00eb n\u00ebnkatalog ruhen skedar\u00ebt binar\u00eb <em>LC_COLLATE<\/em>, <em>LC_CTYPE<\/em>, <em>LC_TIME<\/em> etj. Skedari <em>LC_IDENTIFICATION<\/em> p\u00ebrmban emrin formal t\u00eb lokalitetit (i cili mund t\u00eb ndryshoj\u00eb nga emri i katalogut) dhe komente.<\/p>\n<p><\/p>\n<p>Formati modern parashikon ruajtjen e t\u00eb gjitha lokaliteteve n\u00eb nj\u00eb arkiv t\u00eb vet\u00ebm <em>\/usr\/lib\/locale\/locale-archive<\/em>, i cili shkarkohet n\u00eb memorjen virtuale t\u00eb t\u00eb gjitha proceseve q\u00eb e p\u00ebrdorin <em>glibc<\/em>. Emri i lokalizimit n\u00eb formatin modern p\u00ebrjeton nj\u00eb form\u00eb kanonizimi\u2014n\u00eb emrat e kodimeve mbeten vet\u00ebm numrat dhe shkronjat, t\u00eb cilat jan\u00eb shnd\u00ebrruar n\u00eb shkronja t\u00eb vogla. K\u00ebshtu, <em>ru_RU.KOI8-R<\/em>, do t\u00eb ruhet si <em>ru_RU.koi8r<\/em>.<\/p>\n<p><\/p>\n<p>Skedar\u00ebt hyr\u00ebs k\u00ebrkohen n\u00eb katalogun aktuell, si dhe n\u00eb kataloget <em>\/usr\/share\/i18n\/locales\/<\/em> dhe <em>\/usr\/share\/i18n\/charmaps\/<\/em> p\u00ebr skedar\u00ebt <em>CTT<\/em> dhe skedar\u00ebt e kodimeve p\u00ebrkat\u00ebsisht.<\/p>\n<p><\/p>\n<p>P\u00ebr shembull, urdhri<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">localedef -i ru_RU -f MAC-CYRILLIC ru_RU.MAC-CYRILLIC<\/code><\/pre>\n<p><\/p>\n<p>do t\u00eb kompiloj\u00eb skedarin <em>\/usr\/share\/i18n\/locales\/ru_RU<\/em> duke p\u00ebrdorur skedarin e kodimit <em>\/usr\/share\/i18n\/charmaps\/MAC-CYRILLIC.gz<\/em> dhe do t\u00eb ruaj\u00eb rezultatin n\u00eb <em>\/usr\/lib\/locale\/locale-archive<\/em> me emrin <em>ru_RU.maccyrillic<\/em><\/p>\n<p><\/p>\n<p>N\u00ebse vendosni variabl\u00ebn <em>LANG=en_US.UTF-8<\/em> at\u00ebher\u00eb <em>glibc<\/em> do t\u00eb k\u00ebrkoj\u00eb skedar\u00ebt binar\u00eb t\u00eb lokalizimit n\u00eb renditjen e m\u00ebposhtme t\u00eb skedar\u00ebve dhe katalogeve:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">\/usr\/lib\/locale\/locale-archive\n\/usr\/lib\/locale\/en_US.UTF-8\/\n\/usr\/lib\/locale\/en_US\/\n\/usr\/lib\/locale\/enUTF-8\/\n\/usr\/lib\/locale\/en\/<\/code><\/pre>\n<p><\/p>\n<p>N\u00ebse lokalizimi shfaqet si n\u00eb formatin tradicional ashtu edhe n\u00eb at\u00eb modern, prioritete i jepet atij modern.<\/p>\n<p><\/p>\n<p>List\u00ebn e lokalizimeve t\u00eb kompiluar mund ta shihni me urdhrin <em>locale -a<\/em>.<\/p>\n<p><\/p>\n<h1 id=\"podgotovka-svoey-tablicy-sravneniya\">P\u00ebrgatitja e tabel\u00ebs suaj t\u00eb krahasimit<\/h1>\n<p><\/p>\n<p>Tani, duke u armatosur me njohuri, mund t\u00eb krijoni tabel\u00ebn tuaj t\u00eb p\u00ebrsosur t\u00eb krahasimit t\u00eb vargjeve. Kjo tabel\u00eb duhet t\u00eb krahasoj\u00eb sakt\u00ebsisht shkronjat ruse, duke p\u00ebrfshir\u00eb shkronj\u00ebn \u0401, dhe n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb t\u00eb marr\u00eb parasysh shenjat e pik\u00ebsimit n\u00eb p\u00ebrputhje me tabel\u00ebn <em>ASCII<\/em>.<\/p>\n<p><\/p>\n<p>Procesi i p\u00ebrgatitjes s\u00eb tabel\u00ebs s\u00eb renditjes p\u00ebrb\u00ebhet nga dy etapa: redaktimi i tabel\u00ebs s\u00eb peshave dhe kompilimi i saj n\u00eb form\u00ebn binare me komand\u00ebn <em>localedef<\/em>.<\/p>\n<p><\/p>\n<p>P\u00ebr q\u00ebllim q\u00eb tabela e krahasimit t\u00eb mund t\u00eb p\u00ebrshtatet me minimumin e shpenzimeve p\u00ebr redaktim, n\u00eb formatin <em>ISO 14652<\/em> parashikohen seksione p\u00ebr rregullimin e peshave t\u00eb tabel\u00ebs ekzistuese. Seksonip kalohet me fjal\u00ebn ky\u00e7e <em>reorder-after<\/em> dhe caktimin e pozicionit, pas t\u00eb cilit b\u00ebhet z\u00ebvend\u00ebsimi. Sektori p\u00ebrfundon me vargun <em>reorder-end<\/em>. N\u00ebse nevojitet t\u00eb rregullohen disa pjes\u00eb t\u00eb tabel\u00ebs, krijohet nj\u00eb seksion p\u00ebr \u00e7do pjes\u00eb t\u00eb till\u00eb.<\/p>\n<p><\/p>\n<p>Kam kopjuar versionet e reja t\u00eb skedar\u00ebve <em>iso14651_t1_common<\/em> dhe <em>ru_RU<\/em> nga repositori <em>glibc<\/em> n\u00eb katalogun tim personal ~\/ .local \/ share \/ i18n \/ locales \/ dhe pak e kam redaktuar seksionin <em>LC_COLLATE<\/em> n\u00eb <em>ru_RU<\/em>. Versionet e reja t\u00eb skedar\u00ebve jan\u00eb plot\u00ebsisht t\u00eb pajtueshme me versionin tim <em>glibc<\/em>. N\u00ebse doni t\u00eb p\u00ebrdorni versionet e vjetra t\u00eb skedar\u00ebve, do t'ju duhet t\u00eb ndryshoni emrat simbolik\u00eb dhe vendndodhjen nga e cila fillon z\u00ebvend\u00ebsimi n\u00eb tabel\u00eb.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">LC_COLLATE\n% Kopjoni modelin nga ISO\/IEC 14651\nkopjoni &quot;iso14651_t1&quot;\nri-rendit pas &lt;U000D&gt;\n&lt;U0020&gt; &lt;S0020&gt;;&lt;BASIC&gt;;&lt;MIN&gt;&lt;U0020&gt; % HAP\u00cbSIRA\n&lt;U0021&gt; &lt;S0021&gt;;&lt;BASIC&gt;&lt;MIN&gt;&lt;U0021&gt; % SHENJA E KUSHTIT\n&lt;U0022&gt; &lt;S0022&gt;;&lt;BASIC&gt;&lt;MIN&gt;&lt;U0022&gt; % SHENJA E CITATIT\n...\n&lt;U007D&gt; &lt;S007D&gt;;&lt;BASIC&gt;&lt;MIN&gt;&lt;U007D&gt; % GURI I DJATHT\u00cb\n&lt;U007E&gt; &lt;S007E&gt;;&lt;BASIC&gt;&lt;MIN&gt;&lt;U007E&gt; % TILDA\nri-rendit-fund\nP\u00cbRFUNDON LC_COLLATE<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb t\u00eb v\u00ebrtet\u00eb, do t\u00eb ishte mir\u00eb t\u00eb kaloheshin fushat n\u00eb <em>LC_IDENTIFICATION<\/em> n\u00eb m\u00ebnyr\u00eb q\u00eb ato t\u00eb tregonin p\u00ebr lokalitetin <em>ru_MY<\/em>, por n\u00eb shembullin tim kjo nuk ishte e nevojshme, pasi e p\u00ebrjashtova nga k\u00ebrkimi lokalitetin e arkivuar <em>locale-archive<\/em>.<\/p>\n<p><\/p>\n<p>P\u00ebr <em>localedef<\/em> puna me skedar\u00ebt n\u00eb dosjen time p\u00ebrmes variablit <em>I18NPATH<\/em> mund t\u00eb shtoni nj\u00eb katalog shtes\u00eb p\u00ebr k\u00ebrkimin e skedar\u00ebve hyr\u00ebs, dhe katalogu p\u00ebr ruajtjen e skedar\u00ebve binar\u00eb mund t\u00eb tregohet si nj\u00eb rrug\u00eb me slashe:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; I18NPATH=~\/.local\/share\/i18n localedef -i ru_RU -f UTF-8 ~\/.local\/lib\/locale\/ru_MY.UTF-8<\/code><\/pre>\n<p><\/p>\n<p><em>POSIX<\/em> supozon se n\u00eb <em>LANG<\/em> mund t\u00eb shkruhen rrug\u00eb absolute p\u00ebr katalog\u00ebt me skedare lokalitetesh, q\u00eb fillojn\u00eb me slash t\u00eb drejtp\u00ebrdrejt\u00eb, por <em>glibc<\/em> n\u00eb <em>Linux<\/em> t\u00eb gjitha rrug\u00ebt merren nga katalogu baz\u00eb, i cili mund t\u00eb rishkruhet p\u00ebrmes variablit <em>LOCPATH<\/em>. Pas vendosjes s\u00eb <em>LOCPATH=~\/.local\/lib\/locale\/<\/em> t\u00eb gjitha skedar\u00ebt q\u00eb lidhen me lokalizimin do t\u00eb k\u00ebrkohen vet\u00ebm n\u00eb dosjen time. Arkiva e lokaliteteve me variabl\u00ebn e vendosur <em>LOCPATH<\/em> injorohet.<\/p>\n<p><\/p>\n<p>K\u00ebtu \u00ebsht\u00eb testi vendimtar:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt;&gt; LANG=ru_MY.UTF-8 LOCPATH=~\/.local\/lib\/locale\/ sort buhg.txt\nAbakanov Mihail;piktor\nJolkina Ella;kraniste\nIvanov Andrey;plumber\nIvanova Alla;avokate<\/code><\/pre>\n<p><\/p>\n<p>Hura! E b\u00ebm\u00eb k\u00ebt\u00eb!<\/p>\n<p><\/p>\n<h1 id=\"rabota-nad-oshibkami\">Puna mbi gabimet<\/h1>\n<p><\/p>\n<p>Un\u00eb tashm\u00eb kam p\u00ebrgjigjur n\u00eb pyetjet p\u00ebr renditjen e vargjeve t\u00eb shtruara m\u00eb par\u00eb, por mbeten disa pyetje t\u00eb tjera mbi gabimet \u2014 t\u00eb dukshme dhe t\u00eb padukshme.<\/p>\n<p><\/p>\n<p>Le t\u00eb kthehemi n\u00eb detyr\u00ebn fillestare.<\/p>\n<p><\/p>\n<p>dhe programi <em>sort<\/em> dhe programi <em>join<\/em> p\u00ebrdorin t\u00eb nj\u00ebjtat funksione p\u00ebr krahasimin e vargjeve nga <em>glibc<\/em>. Si ndodhi q\u00eb <em>join<\/em> japin nj\u00eb gabim renditjeje p\u00ebr vargjet e renditura nga komanda <em>sort<\/em> n\u00eb lokalitetin <em>en_US.UTF-8<\/em>? \u041e\u0442\u0432\u0435\u0442 \u043f\u0440\u043e\u0441\u0442: <em>sort<\/em> krahason vargun n\u00eb t\u00ebr\u00ebsi, kurse <em>join<\/em> krahason vet\u00ebm \u00e7el\u00ebsin, i cili p\u00ebr defaut \u00ebsht\u00eb fillimi i vargut deri n\u00eb simbolet e para t\u00eb zbraz\u00ebta. N\u00eb shembullin tim, kjo \u00e7oi n\u00eb nj\u00eb mesazh gabimi sepse renditja e fjal\u00ebve t\u00eb para n\u00eb vargje nuk p\u00ebrputhej me renditjen e vargut t\u00eb plot\u00eb.<\/p>\n<p><\/p>\n<p>Lokaliteti <em>&quot;C&quot;<\/em> garanton q\u00eb n\u00eb stringat e renditura, n\u00ebnstringat deri n\u00eb hapjen e par\u00eb gjithashtu do t\u00eb jen\u00eb t\u00eb renditura, por kjo vet\u00ebm maskon nj\u00eb gabim. Mund t\u00eb zgjidhen t\u00eb dh\u00ebna t\u00eb tilla ( t\u00eb njer\u00ebzve me mbiemra t\u00eb nj\u00ebjt\u00eb, por emra t\u00eb ndrysh\u00ebm), t\u00eb cilat pa nj\u00eb njoftim p\u00ebr gabim do t\u00eb jepnin nj\u00eb rezultat t\u00eb gabuar t\u00eb bashkimit t\u00eb skedar\u00ebve. N\u00ebse duam q\u00eb <em>join<\/em> t\u00eb bashkojm\u00eb stringat e skedar\u00ebve sipas emrit dhe mbiemrit, m\u00ebnyra e duhur do t\u00eb ishte t\u00eb tregohet qart\u00eb ndar\u00ebsi i fushave dhe t\u00eb renditen sipas fush\u00ebs ky\u00e7e, e jo sipas t\u00eb gjith\u00eb stringut. N\u00eb k\u00ebt\u00eb rast, bashkimi do t\u00eb kaloj\u00eb si\u00e7 duhet dhe n\u00eb asnj\u00eb lokalitet nuk do t\u00eb ket\u00eb gabime:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; sort -t ; -k 1 buhg.txt &gt; buhg.srt\n$&gt; sort -t ; -k 1 mail.txt &gt; mail.srt\n$&gt; join -t ; buhg.srt mail.srt &gt; result<\/code><\/pre>\n<p><\/p>\n<p>Nj\u00eb shembull i realizuar me sukses n\u00eb kodimin <em>CP1251<\/em> ka nj\u00eb tjet\u00ebr gabim. \u00c7\u00ebshtja \u00ebsht\u00eb se n\u00eb t\u00eb gjith\u00eb shp\u00ebrndarjet e njohura p\u00ebr mua <em>Linux<\/em> n\u00eb paketat mungon lokaliteti i kompiluar <em>ru_RU.CP1251<\/em>. N\u00ebse lokaliteti i kompiluar nuk gjendet, at\u00ebher\u00eb <em>sort<\/em> n\u00eb heshtje p\u00ebrdor krahasimin byte-per-byte, gj\u00eb q\u00eb ne po v\u00ebzhgojm\u00eb.<\/p>\n<p><\/p>\n<p>P\u00ebr sa i p\u00ebrket, ka nj\u00eb tjet\u00ebr ndjesi t\u00eb vog\u00ebl t\u00eb lidhur me paaft\u00ebsin\u00eb p\u00ebr t\u00eb aksesuar lokalitetet e kompiluar. Komanda <em>LOCPATH=\/tmp locale -a<\/em> do t\u00eb jap\u00eb nj\u00eb list\u00eb t\u00eb t\u00eb gjitha lokaliteteve n\u00eb <em>locale-archive<\/em>, por me variablin e instaluar <em>LOCPATH<\/em> p\u00ebr t\u00eb gjitha programet (p\u00ebrfshir\u00eb at\u00eb m\u00eb t\u00eb <em>locale<\/em>) k\u00ebto locale nuk do t\u00eb jen\u00eb t\u00eb disponueshme.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LOCPATH=\/tmp locale -a | grep en_US\nlocale: Nuk mund t\u00eb vendos LC_CTYPE n\u00eb locale standarde: Nuk ka nj\u00eb vendndodhje t\u00eb till\u00eb ose direktor\nlocale: Nuk mund t\u00eb vendos LC_MESSAGES n\u00eb locale standarde: Nuk ka nj\u00eb vendndodhje t\u00eb till\u00eb ose direktor\nlocale: Nuk mund t\u00eb vendos LC_COLLATE n\u00eb locale standarde: Nuk ka nj\u00eb vendndodhje t\u00eb till\u00eb ose direktor\nen_US\nen_US.iso88591\nen_US.iso885915\nen_US.utf8\n\n$&gt; LC_COLLATE=en_US.UTF-8 sort --debug\nsort: po p\u00ebrdor rregullat e renditjes \u2018en_US.UTF-8\u2019\n\n$&gt; LOCPATH=\/tmp LC_COLLATE=en_US.UTF-8 sort --debug\nsort: po p\u00ebrdor krahasimin e bytes t\u00eb thjesht\u00eb<\/code><\/pre>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">P\u00ebrfundimi<\/h1>\n<p><\/p>\n<p>N\u00ebse jeni programues q\u00eb keni zakon t\u00eb mendoni se stringjet jan\u00eb nj\u00eb grup bytes, at\u00ebher\u00eb zgjedhja juaj <em>LC_COLLATE=C<\/em>.<\/p>\n<p><\/p>\n<p>N\u00ebse jeni lingvist ose kompozitor fjalor\u00ebsh, \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb kompilonin locale tuaj.<\/p>\n<p><\/p>\n<p>N\u00ebse jeni p\u00ebrdorues i zakonsh\u00ebm, mjafton t\u00eb m\u00ebsoni q\u00eb komanda <em>ls -a<\/em> jep skedar\u00eb q\u00eb fillojn\u00eb me pik\u00eb, s\u00eb bashku me skedar\u00eb q\u00eb fillojn\u00eb me shkronj\u00eb, dhe <em>Midnight Commander<\/em>, i cili p\u00ebrdor funksionet e tij t\u00eb brendshme p\u00ebr t\u00eb renditur emrat, i sjell skedar\u00ebt q\u00eb fillojn\u00eb me pik\u00eb n\u00eb fillim t\u00eb list\u00ebs.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Linke<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/unicode.org\/reports\/tr10\/\">Raporti Nr. 10 algoritmi i krahasimit t\u00eb Unicode <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.unicode.org\/Public\/UCA\/latest\/allkeys.txt\">Peshat e simboleve n\u00eb unicode.org <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/userguide.icu-project.org\/intro\"><em>ICU<\/em> \u2014 implementimi i bibliotek\u00ebs p\u00ebr pun\u00ebn me Unicode nga IBM. <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/demo.icu-project.org\/icu-bin\/collation.html\">Test i renditjes me <em>ICU<\/em> <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.iso.org\/ittf\/ISO14651_2006_TABLE1_en.txt\">Peshat e simboleve n\u00eb <em>ISO 14651<\/em> <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.open-std.org\/JTC1\/SC22\/WG20\/docs\/n972-14652ft.pdf\">P\u00ebrshkrimi i formatit t\u00eb skedarit me pesha <em>ISO 14652<\/em> <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/sourceware.org\/bugzilla\/show_bug.cgi?id=14095\">Diskutim mbi krahasimin e string\u00ebve n\u00eb <em>glibc<\/em><\/a><\/noindex><\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/503960\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 e-mail \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438, \u0441 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0430\u0437\u044b \u043e\u0442\u0434\u0435\u043b\u0430 \u043a\u0430\u0434\u0440\u043e\u0432. \u041e\u0431\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u042e\u043d\u0438\u043a\u043e\u0434 UTF-8 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0441 \u044e\u043d\u0438\u043a\u0441\u043e\u0432\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0446\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 mail.txt \u0418\u0432\u0430\u043d\u043e\u0432 \u0410\u043d\u0434\u0440\u0435\u0439;ia@example.com \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 buhg.txt \u0418\u0432\u0430\u043d\u043e\u0432\u0430 \u0410\u043b\u043b\u0430;\u043c\u0430\u043b\u044f\u0440 \u0401\u043b\u043a\u0438\u043d\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83055","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 e-mail \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438, \u0441 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0430\u0437\u044b \u043e\u0442\u0434\u0435\u043b\u0430 \u043a\u0430\u0434\u0440\u043e\u0432. \u041e\u0431\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u042e\u043d\u0438\u043a\u043e\u0434 UTF-8 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0441 \u044e\u043d\u0438\u043a\u0441\u043e\u0432\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0446\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 mail.txt \u0418\u0432\u0430\u043d\u043e\u0432 \u0410\u043d\u0434\u0440\u0435\u0439;ia@example.com \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 buhg.txt \u0418\u0432\u0430\u043d\u043e\u0432\u0430 \u0410\u043b\u043b\u0430;\u043c\u0430\u043b\u044f\u0440 \u0401\u043b\u043a\u0438\u043d\u0430\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a Linux\u2019\u043e\u0432\u0441\u043a\u0438\u0439 sort \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 e-mail \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438, \u0441 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0430\u0437\u044b \u043e\u0442\u0434\u0435\u043b\u0430 \u043a\u0430\u0434\u0440\u043e\u0432. \u041e\u0431\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u042e\u043d\u0438\u043a\u043e\u0434 UTF-8 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0441 \u044e\u043d\u0438\u043a\u0441\u043e\u0432\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0446\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 mail.txt \u0418\u0432\u0430\u043d\u043e\u0432 \u0410\u043d\u0434\u0440\u0435\u0439;ia@example.com \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 buhg.txt \u0418\u0432\u0430\u043d\u043e\u0432\u0430 \u0410\u043b\u043b\u0430;\u043c\u0430\u043b\u044f\u0440 \u0401\u043b\u043a\u0438\u043d\u0430\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-27T23:42:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-27T23:42:15+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Si rendit Linux'ovski sort rreshtat | ProHoster","description":"Hyrja T\u00eb gjith\u00e7ka filloi me nj\u00eb skenar t\u00eb shkurt\u00ebr q\u00eb duhej t\u00eb bashkonte informacionin mbi adresat e-mail t\u00eb punonj\u00ebsve, t\u00eb marr\u00eb nga lista e p\u00ebrdoruesve t\u00eb shp\u00ebrndarjes, me pozitat e punonj\u00ebsve, t\u00eb marra nga databaza e departamentit t\u00eb burimeve njer\u00ebzore. T\u00eb dy listat u eksportuan n\u00eb skedar\u00eb teksti n\u00eb kodimin Unicode UTF-8 dhe u ruajt\u00ebn me fundet e rreshtit t\u00eb Unix-it. P\u00ebrmbajtja e mail.txt Ivanov Andrey;ia@example.com P\u00ebrmbajtja e buhg.txt Ivanova Alla;piktore Yelkina","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a Linux\u2019\u043e\u0432\u0441\u043a\u0438\u0439 sort \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 e-mail \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438, \u0441 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0430\u0437\u044b \u043e\u0442\u0434\u0435\u043b\u0430 \u043a\u0430\u0434\u0440\u043e\u0432. \u041e\u0431\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u042e\u043d\u0438\u043a\u043e\u0434 UTF-8 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0441 \u044e\u043d\u0438\u043a\u0441\u043e\u0432\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0446\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 mail.txt \u0418\u0432\u0430\u043d\u043e\u0432 \u0410\u043d\u0434\u0440\u0435\u0439;ia@example.com \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 buhg.txt \u0418\u0432\u0430\u043d\u043e\u0432\u0430 \u0410\u043b\u043b\u0430;\u043c\u0430\u043b\u044f\u0440 \u0401\u043b\u043a\u0438\u043d\u0430","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-27T23:42:15+00:00","article:modified_time":"2020-05-27T23:42:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83055","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:26:22","updated":"2022-09-27 19:16:08"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/83055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=83055"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/83055\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=83055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=83055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=83055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}