{"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\/hu\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki","title":{"rendered":"Hogyan rendezi a Linux-os sort a sorokat","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Bevezet\u00e9s<\/h1>\n<p><\/p>\n<p>Minden egy r\u00f6vid szkripttel kezd\u0151d\u00f6tt, amelynek az volt a c\u00e9lja, hogy \u00f6sszevonja az e-mail c\u00edmet <em>e-mail<\/em> a munkat\u00e1rsakr\u00f3l, amelyeket a h\u00edrlev\u00e9l felhaszn\u00e1l\u00f3i list\u00e1j\u00e1b\u00f3l kaptunk, a munkat\u00e1rsak beoszt\u00e1saival, amelyeket a HR adatb\u00e1zisb\u00f3l nyert\u00fcnk. Mindk\u00e9t lista sz\u00f6vegf\u00e1jlokba lett export\u00e1lva Unicode k\u00f3dol\u00e1sban <em>UTF-8<\/em> \u00e9s Unix-os sorv\u00e9gz\u0151d\u00e9sekkel lettek mentve.<\/p>\n<p><\/p>\n<p>Tartalom <em>mail.txt<\/em><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Ivanov Andr\u00e1s;ia@example.com<\/code><\/pre>\n<p><\/p>\n<p>Tartalom <em>buhg.txt<\/em><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Ivanova Alla;fest\u0151\nYolkina Ella;darukezel\u0151\nIvanov Andr\u00e1s;szerel\u0151\nAbakanov Mih\u00e1ly;fest\u0151<\/code><\/pre>\n<p><\/p>\n<p>Az egyes\u00edt\u00e9shez a f\u00e1jlokat a Unix parancs seg\u00edts\u00e9g\u00e9vel rendezt\u00e9k <em>sort<\/em> \u00e9s a Unix program bemenet\u00e9re ker\u00fcltek <em>join<\/em>, amely v\u00e1ratlanul hib\u00e1val z\u00e1rult: <\/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: nincs rendezve: Ivanov Andr\u00e1s;szerel\u0151<\/code><\/pre>\n<p><\/p>\n<p>A rendez\u00e9s eredm\u00e9ny\u00e9nek szemmel t\u00f6rt\u00e9n\u0151 \u00e1ttekint\u00e9se arra mutatott, hogy a rendez\u00e9s \u00e1ltal\u00e1ban helyes, de a f\u00e9rfiak \u00e9s n\u0151k neveinek \u00fctk\u00f6z\u00e9se eset\u00e9n a n\u0151i nevek megel\u0151zik a f\u00e9rfiakat:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; sort buhg.txt\nAbakanov Mih\u00e1ly;fest\u0151\nYolkina Ella;darukezel\u0151\nIvanova Alla;fest\u0151\nIvanov Andr\u00e1s;szerel\u0151<\/code><\/pre>\n<p><\/p>\n<p>\u00dagy t\u0171nik, ez a Unicode rendez\u00e9s bugja, vagy a feminizmus megnyilv\u00e1nul\u00e1sa a rendez\u00e9si algoritmusban. Az els\u0151, term\u00e9szetesen, val\u00f3sz\u00edn\u0171bb.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Hagyjuk most <em>join<\/em> \u00e9s koncentr\u00e1ljunk <em>sort<\/em>. Pr\u00f3b\u00e1ljuk meg megoldani a probl\u00e9m\u00e1t a k\u00eds\u00e9rletez\u00e9s m\u00f3dszer\u00e9vel. El\u0151sz\u00f6r is, v\u00e1ltoztassuk meg a nyelvi be\u00e1ll\u00edt\u00e1st <em>en_US<\/em> Gyorsan eml\u00e9kezz\u00fcnk vissza, hogyan m\u0171k\u00f6dik a modul\u00e1ris aritmetika. Az \u00f3ra m\u00e1r egy ismert koncepci\u00f3. Az \u00f3r\u00e1k haszn\u00e1lata <em>ru_RU<\/em>. A rendez\u00e9shez elegend\u0151 lenne a k\u00f6rnyezeti v\u00e1ltoz\u00f3 be\u00e1ll\u00edt\u00e1sa <em>LC_COLLATE<\/em>, de nem fogunk fukarkodni:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LANG=ru_RU.UTF-8 sort buhg.txt\nAbakanov Mih\u00e1ly;fest\u0151\nYolkina Ella;darukezel\u0151\nIvanova Alla;fest\u0151\nIvanov Andr\u00e1s;szerel\u0151<\/code><\/pre>\n<p><\/p>\n<p>Semmi sem v\u00e1ltozott.<\/p>\n<p><\/p>\n<p>Pr\u00f3b\u00e1ljuk meg a f\u00e1jlokat egy b\u00e1jtos k\u00f3dol\u00e1sra \u00e1tkonvert\u00e1lni: <\/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>Megint semmi sem v\u00e1ltozott.<\/p>\n<p><\/p>\n<p>Nem tehet\u00fcnk m\u00e1st, interneten kell megold\u00e1st keresn\u00fcnk. Kifejezetten orosz nevekr\u0151l nincsenek inform\u00e1ci\u00f3k, de vannak k\u00e9rd\u00e9sek m\u00e1s rendez\u00e9si furcsas\u00e1gokr\u00f3l. P\u00e9ld\u00e1ul a k\u00f6vetkez\u0151 probl\u00e9ma: <noindex><a rel=\"nofollow\" href=\"https:\/\/serverfault.com\/questions\/95579\/unix-sort-treats-dash-characters-as-invisible\/95593\">A UNIX rendez\u0151program a &#8216;-&#8216; (t\u00f6rzs) karaktereket l\u00e1thatatlank\u00e9nt kezeli<\/a><\/noindex>. R\u00f6viden, az &quot;a-b&quot;, &quot;aa&quot;, &quot;ac&quot; sztringeket \u00edgy rendezik: &quot;aa&quot;, &quot;a-b&quot;, &quot;ac&quot;.<\/p>\n<p><\/p>\n<p>A v\u00e1lasz mindenhol standard: haszn\u00e1lj programoz\u00f3i nyelvet <em>&quot;C&quot;<\/em> \u00e9s boldog leszel. Pr\u00f3b\u00e1ljuk:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LANG=C sort buhg.txt\nYolkina Ella;darukezel\u0151\nAbakanov Mih\u00e1ly;fest\u0151\nIvanov Andr\u00e1s;szerel\u0151\nIvanova Alla;\u00fcgyv\u00e9d<\/code><\/pre>\n<p><\/p>\n<p>Valami megv\u00e1ltozott. Ivanovok a helyes sorrendbe \u00e1lltak, b\u00e1r Yolkina valahov\u00e1 elt\u0171nt. Visszat\u00e9r\u00fcnk az eredeti feladathoz:<\/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>Hib\u00e1tlanul m\u0171k\u00f6d\u00f6tt, ahogy az internet \u00edg\u00e9rte. \u00c9s ez mal a \u0401lkin els\u0151 sor\u00e1hoz k\u00e9pest.<\/p>\n<p><\/p>\n<p>A probl\u00e9ma \u00fagy t\u0171nik megold\u00f3dott, de az\u00e9rt pr\u00f3b\u00e1ljunk ki m\u00e9g egy orosz k\u00f3dol\u00e1st \u2013 a Windows-it. <em>CP1251<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; iconv -f UTF-8 -t CP1251 buhg.txt \n | LANG=hu_HU.CP1251 sort \n | iconv -f CP1251 -t UTF8 <\/code><\/pre>\n<p><\/p>\n<p>A rendez\u00e9s eredm\u00e9nye, meglep\u0151 m\u00f3don, egybeesik a lok\u00e1lissal <em>&quot;C&quot;<\/em>, \u00e9s az eg\u00e9sz p\u00e9lda ennek megfelel\u0151en hib\u00e1k n\u00e9lk\u00fcl \u00e1tmegy. Valamilyen misztika.<\/p>\n<p><\/p>\n<p>Nem szeretem a misztik\u00e1t a programoz\u00e1sban, mert \u00e1ltal\u00e1ban a hib\u00e1k elrejt\u00e9s\u00e9re szolg\u00e1l. Komolyan foglalkoznom kell azzal, hogyan m\u0171k\u00f6dik <em>sort<\/em> \u00e9s milyen hat\u00e1ssal van <em>LC_COLLATE<\/em> .<\/p>\n<p><\/p>\n<p>A v\u00e9g\u00e9n megpr\u00f3b\u00e1lok v\u00e1laszolni a k\u00e9rd\u00e9sekre:<\/p>\n<p><\/p>\n<ul>\n<li>mi\u00e9rt rendezt\u00e9k hib\u00e1san a n\u0151i vezet\u00e9kneveket<\/li>\n<li>mi\u00e9rt <em>LANG=hu_HU.CP1251<\/em> egyen\u00e9rt\u00e9k\u0171nek bizonyult <em>LANG=C<\/em><\/li>\n<li>mi\u00e9rt van <em>sort<\/em> \u00e9s <em>join<\/em> k\u00fcl\u00f6nb\u00f6z\u0151 elk\u00e9pzel\u00e9sei az \u00f6sszesorolt sorok sorrendj\u00e9r\u0151l<\/li>\n<li>mi\u00e9rt vannak hib\u00e1k minden p\u00e9ld\u00e1mban<\/li>\n<li>v\u00e9g\u00fcl, hogyan lehet rendezni a sorokat saj\u00e1t \u00edzl\u00e9s szerint<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"sortirovka-v-yunikode\">Rendez\u00e9s Unicode-ban<\/h1>\n<p><\/p>\n<p>Az els\u0151 meg\u00e1ll\u00f3 a 10-es sz\u00e1m\u00fa m\u0171szaki jelent\u00e9s lesz <noindex><a rel=\"nofollow\" href=\"https:\/\/unicode.org\/reports\/tr10\/\">Unicode rendez\u00e9si algoritmus<\/a><\/noindex> a weboldalon <noindex><a rel=\"nofollow\" href=\"https:\/\/unicode.org\">unicode.org<\/a><\/noindex>. A jelent\u00e9s sok m\u0171szaki r\u00e9szletet tartalmaz, ez\u00e9rt megengedem magamnak, hogy egy r\u00f6vid \u00f6sszefoglal\u00f3t adjak az alapvet\u0151 \u00f6tletekr\u0151l.<\/p>\n<p><\/p>\n<p><em>Rendez\u00e9s<\/em> \u2014 Az &quot;sztringek&quot; \u00f6sszehasonl\u00edt\u00e1sa \u2014 a rendez\u00e9si algoritmusok alapja. Maguk az algoritmusok elt\u00e9rhetnek (pl. &quot;bubor\u00e9krendez\u00e9s&quot;, &quot;\u00f6sszevon\u00e1s&quot;, &quot;gyors&quot;), de mindegyik a sztringek p\u00e1rba \u00e1ll\u00edt\u00e1s\u00e1t haszn\u00e1lja a sorrend meghat\u00e1roz\u00e1s\u00e1ra.<\/p>\n<p><\/p>\n<p>A term\u00e9szetes nyelven t\u00f6rt\u00e9n\u0151 sorba \u00e1ll\u00edt\u00e1s meglehet\u0151sen bonyolult probl\u00e9ma. M\u00e9g a legegyszer\u0171bb, egyb\u00e1jtos k\u00f3dol\u00e1sok eset\u00e9n is, a bet\u0171k sorrendje az \u00e1b\u00e9c\u00e9ben, ha elt\u00e9r az angol latin \u00e1b\u00e9c\u00e9t\u0151l, m\u00e1r nem fog egybeesni azoknak a numerikus \u00e9rt\u00e9keivel, amelyek ezt a bet\u0171t k\u00f3dolj\u00e1k. \u00cdgy p\u00e9ld\u00e1ul a n\u00e9met \u00e1b\u00e9c\u00e9ben az \"\u00d6\" bet\u0171 <em>k\u00f6z\u00f6tt \u00e1ll<\/em> , m\u00edg a \"CP850\" k\u00f3dol\u00e1sban <em>A<\/em> \u00e9s <em>P<\/em>a k\u00f6vetkez\u0151n\u00e9l landol: <em>\u00ff<\/em> \u00dc <em>Megpr\u00f3b\u00e1lhatunk elvonatkoztatni a konkr\u00e9t k\u00f3dol\u00e1st\u00f3l, \u00e9s \"ide\u00e1lis\" bet\u0171ket vizsg\u00e1lni, amelyek valamilyen sorrendben helyezkednek el, ahogy a Unicode-ban is t\u00f6rt\u00e9nik. A \"UTF8\", \"UTF16\"<\/em> \u00e9s <em>vagy az egys\u00e9ges, egyb\u00e1jtos<\/em>.<\/p>\n<p><\/p>\n<p>Megpr\u00f3b\u00e1lhatunk elvonatkoztatni a konkr\u00e9t karakterk\u00f3dol\u00e1st\u00f3l, \u00e9s az &quot;ide\u00e1lis&quot; bet\u0171ket egy bizonyos sorrendben vizsg\u00e1lni, ahogyan az a Unicode-ban t\u00f6rt\u00e9nik. A karakterk\u00f3dol\u00e1sok <em>(ha korl\u00e1tozott Unicode r\u00e9szhalmazra van sz\u00fcks\u00e9g) k\u00fcl\u00f6nb\u00f6z\u0151 numerikus megjelen\u00edt\u00e9st ad a bet\u0171knek, de ugyanakkor az alap t\u00e1bl\u00e1zat ugyanazokat az elemeket hivatkozza.<\/em>, <em>(ha korl\u00e1tozott Unicode r\u00e9szhalmazra van sz\u00fcks\u00e9g) k\u00fcl\u00f6nb\u00f6z\u0151 numerikus megjelen\u00edt\u00e9st ad a bet\u0171knek, de ugyanakkor az alap t\u00e1bl\u00e1zat ugyanazokat az elemeket hivatkozza.<\/em> (ha korl\u00e1tozott Unicode r\u00e9szhalmazra van sz\u00fcks\u00e9g) k\u00fcl\u00f6nb\u00f6z\u0151 numerikus megjelen\u00edt\u00e9st ad a bet\u0171knek, de ugyanakkor az alap t\u00e1bl\u00e1zat ugyanazokat az elemeket hivatkozza. <em>(ha korl\u00e1tozott Unicode r\u00e9szhalmazra van sz\u00fcks\u00e9g) k\u00fcl\u00f6nb\u00f6z\u0151 numerikus megjelen\u00edt\u00e9st ad a bet\u0171knek, de ugyanakkor az alap t\u00e1bl\u00e1zat ugyanazokat az elemeket hivatkozza.<\/em> (ha korl\u00e1tozott Unicode r\u00e9szhalmazra van sz\u00fcks\u00e9g) k\u00fcl\u00f6nb\u00f6z\u0151 numerikus megjelen\u00edt\u00e9st ad a bet\u0171knek, de ugyanakkor az alap t\u00e1bl\u00e1zat ugyanazokat az elemeket hivatkozza. <\/p>\n<p><\/p>\n<p>Kider\u00fcl, hogy m\u00e9g ha null\u00e1r\u00f3l \u00e9p\u00edt\u00fcnk is egy karaktert\u00e1bl\u00e1t, nem tudunk univerz\u00e1lis karakterrendet rendelni hozz\u00e1. K\u00fcl\u00f6nb\u00f6z\u0151 nemzeti \u00e1b\u00e9c\u00e9k, amelyek ugyanazokat a bet\u0171ket haszn\u00e1lj\u00e1k, elt\u00e9r\u0151 rendben tartalmazhatj\u00e1k ezeket a bet\u0171ket. P\u00e9ld\u00e1ul a francia nyelvben <em>\u00c6<\/em> ligat\u00far\u00e1nak sz\u00e1m\u00edt, \u00e9s sztringk\u00e9nt sorsz\u00e1moz\u00f3dik <em>AL<\/em>. A norv\u00e9g nyelvben viszont <em>\u00c6<\/em> k\u00fcl\u00f6n\u00e1ll\u00f3 bet\u0171, amely a k\u00f6vetkez\u0151 helyen \u00e1ll: <em>Z<\/em>. Egy\u00e9bk\u00e9nt a ligat\u00far\u00e1kon k\u00edv\u00fcl vannak olyan bet\u0171k is, amelyeket t\u00f6bb karakterrel \u00edrnak. Ilyen p\u00e9ld\u00e1ul a cseh \u00e1b\u00e9c\u00e9ben tal\u00e1lhat\u00f3 <em>\u00c6<\/em> Ch <em>, amely a k\u00f6vetkez\u0151 kett\u0151 k\u00f6z\u00f6tt helyezkedik el:<\/em>Az \u00e1b\u00e9c\u00e9k k\u00f6z\u00f6tti elt\u00e9r\u00e9sek mellett m\u00e1s nemzeti hagyom\u00e1nyok is befoly\u00e1solj\u00e1k a sorsz\u00e1moz\u00e1st. P\u00e9ld\u00e1ul felmer\u00fcl a k\u00e9rd\u00e9s: milyen sorrendben kell k\u00f6vetkezni\u00fck a sz\u00f3t\u00e1rban a nagy- \u00e9s kisbet\u0171s szavaknak? A sorsz\u00e1moz\u00e1sra hat\u00e1ssal lehet a \u00edr\u00e1sjelek haszn\u00e1lata is. A spanyol nyelvben a k\u00e9rd\u0151mondat elej\u00e9n ford\u00edtott k\u00e9rd\u0151jelet tesznek ( <em>H<\/em> \u00e9s <em>I<\/em>.<\/p>\n<p><\/p>\n<p>\u00bfTe gusta la m\u00fasica?<em>). Nyilv\u00e1nval\u00f3, hogy a k\u00e9rd\u0151mondatoknak nem szabad k\u00fcl\u00f6n klaszterbe t\u00f6m\u00f6r\u00fclni\u00fck az \u00e1b\u00e9c\u00e9n k\u00edv\u00fcl, de hogyan kell sorsz\u00e1mozni az egy\u00e9b \u00edr\u00e1sjeleket tartalmaz\u00f3 sztringeket?<\/em>Nem szeretn\u00e9k a sztringek sorsz\u00e1moz\u00e1s\u00e1ra \u00f6sszpontos\u00edtani sokkal elt\u00e9r\u0151bb nyelvek eset\u00e9n. Csak megjegyzem, hogy a jobbr\u00f3l balra vagy fentr\u0151l lefel\u00e9 \u00edr\u00f3 nyelvekben a sztringek val\u00f3sz\u00edn\u0171leg az olvas\u00e1si sorrendben vannak t\u00e1rolva, \u00e9s m\u00e9g a nem \u00e1b\u00e9c\u00e9 alap\u00fa \u00edr\u00e1sokban is l\u00e9teznek saj\u00e1t karakterenk\u00e9nti sorsz\u00e1moz\u00e1si m\u00f3dszereik. P\u00e9ld\u00e1ul a hieroglif\u00e1k lehetnek a rajz szerint (<\/p>\n<p><\/p>\n<p>a k\u00ednai karakterek kulcsai<noindex><a rel=\"nofollow\" href=\"https:\/\/studychinese.ru\/kljuchi\/\">) vagy a kiejt\u00e9s alapj\u00e1n sorsz\u00e1mozva. \u0150szint\u00e9n sz\u00f3lva, nem tudom, hogyan kellene a hangulatjeleket sorsz\u00e1mozni, de sz\u00e1mukra is lehet valamit kital\u00e1lni.<\/a><\/noindex>A fenti jellemz\u0151k alapj\u00e1n a Unicode t\u00e1bl\u00e1kon alapul\u00f3 sztringek \u00f6sszehasonl\u00edt\u00e1s\u00e1ra vonatkoz\u00f3 alapvet\u0151 k\u00f6vetelm\u00e9nyeket fogalmazt\u00e1k meg:<\/p>\n<p><\/p>\n<p>sztring \u00f6sszehasonl\u00edt\u00e1sa nem f\u00fcgg a karakterek helyzet\u00e9t\u0151l a k\u00f3dolt t\u00e1bl\u00e1zatban;<\/p>\n<p><\/p>\n<ul>\n<li>az egyetlen karaktert alkot\u00f3 karakterek sorrendje kanonikus form\u00e1ba ker\u00fcl (<\/li>\n<li>+ a fels\u0151 k\u00f6r az megegyezik azzal, hogy<em>A<\/em> \u00c5 <em>sztringek \u00f6sszehasonl\u00edt\u00e1sa sor\u00e1n a karaktert a sztring kontextus\u00e1ba helyezik, \u00e9s sz\u00fcks\u00e9g eset\u00e9n \u00f6sszevonj\u00e1k szomsz\u00e9daival egy \u00f6sszehasonl\u00edt\u00e1si egys\u00e9gbe (<\/em>);<\/li>\n<li>cseh nyelven), vagy sz\u00e9tbontj\u00e1k t\u00f6bb r\u00e9szre (<em>, amely a k\u00f6vetkez\u0151 kett\u0151 k\u00f6z\u00f6tt helyezkedik el:<\/em> franci\u00e1ul);<em>\u00c6<\/em> franciai);<\/li>\n<li>Minden nemzeti saj\u00e1toss\u00e1g (bet\u0171rend, nagybet\u0171k\/kisbet\u0171k, \u00edr\u00e1sjelek, \u00edr\u00e1sst\u00edlusok sorrendje) be\u00e1ll\u00edthat\u00f3 eg\u00e9szen a manu\u00e1lis rendel\u00e9sig (emojik);<\/li>\n<li>A rendez\u00e9shez sz\u00fcks\u00e9ges \u00f6sszehasonl\u00edt\u00e1s nemcsak a rendez\u00e9sn\u00e9l fontos, hanem sok m\u00e1s helyen is, p\u00e9ld\u00e1ul a sorok tartom\u00e1ny\u00e1nak megad\u00e1sakor ({A\u2026 \u044f} behelyettes\u00edt\u00e9ssel <em>bash<\/em>);<\/li>\n<li>Az \u00f6sszehasonl\u00edt\u00e1snak el\u00e9g gyorsnak kell lennie.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl a jelent\u00e9s \u00edr\u00f3i megfogalmazt\u00e1k azokat az \u00f6sszehasonl\u00edt\u00e1si tulajdons\u00e1gokat, amelyekre a algoritmus fejleszt\u0151inek nem szabad t\u00e1maszkodniuk:<\/p>\n<p><\/p>\n<ul>\n<li>Az \u00f6sszehasonl\u00edt\u00f3 algoritmusnak nem kell k\u00fcl\u00f6n karakterk\u00e9szletet ig\u00e9nyelnie minden nyelvhez (orosz \u00e9s ukr\u00e1n nyelvek k\u00f6z\u00f6sen haszn\u00e1lj\u00e1k a cirill \u00e1b\u00e9c\u00e9 t\u00f6bbs\u00e9g\u00e9t);<\/li>\n<li>Az \u00f6sszehasonl\u00edt\u00e1snak nem szabad t\u00e1maszkodnia a Unicode t\u00e1bl\u00e1zatok karaktereinek sorrendj\u00e9re;<\/li>\n<li>A sor s\u00falya nem lehet a sor attrib\u00fatuma, mivel ugyanaz a sor k\u00fcl\u00f6nb\u00f6z\u0151 kultur\u00e1lis kontextusokban elt\u00e9r\u0151 s\u00faly\u00fa lehet;<\/li>\n<li>A sorok s\u00falya megv\u00e1ltozhat egyes\u00fcl\u00e9s vagy feldarabol\u00e1s eset\u00e9n (a <em>x<\/em> &lt; <em>y<\/em> nem jelenti azt, hogy <em>xz<\/em> &lt; <em>yz<\/em>);<\/li>\n<li>Az azonos s\u00faly\u00fa sorok az algoritmus szempontj\u00e1b\u00f3l egyenl\u0151nek min\u0151s\u00fclnek. Tov\u00e1bbi rendez\u00e9s bevezet\u00e9se ezekre a sorokra lehets\u00e9ges, de ronthatja a teljes\u00edtm\u00e9nyt;<\/li>\n<li>T\u00f6bbsz\u00f6r\u00f6s rendez\u00e9sek eset\u00e9n az azonos s\u00faly\u00fa sorok felcser\u00e9lhet\u0151k. A stabilit\u00e1s egy konkr\u00e9t rendez\u00e9si algoritmus tulajdons\u00e1ga, nem pedig a karakterek \u00f6sszehasonl\u00edt\u00e1s\u00e1nak tulajdons\u00e1ga (l\u00e1sd az el\u0151z\u0151 pontot);<\/li>\n<li>A rendez\u00e9si szab\u00e1lyok id\u0151vel v\u00e1ltozhatnak a kultur\u00e1lis hagyom\u00e1nyok finom\u00edt\u00e1sa\/m\u00f3dos\u00edt\u00e1sa sor\u00e1n.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ugyancsak meg van jegyezve, hogy az \u00f6sszehasonl\u00edt\u00f3 algoritmus semmit sem tud a feldolgozott sz\u00f6vegek szemantik\u00e1j\u00e1r\u00f3l. \u00cdgy a kiz\u00e1r\u00f3lag sz\u00e1mjegyekb\u0151l \u00e1ll\u00f3 sz\u00f6vegeket nem szabad sz\u00e1mk\u00e9nt \u00f6sszehasonl\u00edtani, \u00e9s az angol elnevez\u00e9sek list\u00e1j\u00e1n a n\u00e9vellet nem szabad elt\u00e1vol\u00edtani (<em>Beatles, The<\/em>).<\/p>\n<p><\/p>\n<p>A fenti k\u00f6vetelm\u00e9nyek teljes\u00edt\u00e9se \u00e9rdek\u00e9ben egy t\u00f6bbr\u00e9teg\u0171 (val\u00f3j\u00e1ban n\u00e9gy r\u00e9teg\u0171) t\u00e1bl\u00e1zatos rendez\u00e9si algoritmust javasoltak.<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r a karaktereket a sz\u00f6vegben kanonikus form\u00e1ra alak\u00edtj\u00e1k, \u00e9s hasonl\u00f3s\u00e1gi egys\u00e9gekre csoportos\u00edtj\u00e1k. Minden hasonl\u00f3s\u00e1gi egys\u00e9g t\u00f6bb s\u00falyt kap, amelyek k\u00fcl\u00f6nb\u00f6z\u0151 \u00f6sszehasonl\u00edt\u00e1si szintekhez tartoznak. A hasonl\u00f3s\u00e1gi egys\u00e9gek s\u00falyai rendezett halmazok elemei (ebben az esetben eg\u00e9sz sz\u00e1mok), amelyeket \u00f6ssze lehet hasonl\u00edtani nagys\u00e1g szerint. K\u00fcl\u00f6nleges \u00e9rt\u00e9k <em>IGNORED<\/em> (0x0) azt jelenti, hogy az adott szint\u0171 \u00f6sszehasonl\u00edt\u00e1sban ez az egys\u00e9g nem vesz r\u00e9szt. A karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1sa t\u00f6bbsz\u00f6r is megism\u00e9telhet\u0151, a megfelel\u0151 szintek s\u00falyainak felhaszn\u00e1l\u00e1s\u00e1val. Minden egyes szinten a karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1sa sor\u00e1n az \u00f6sszehasonl\u00edt\u00f3 egys\u00e9gek s\u00falyait fokozatosan hasonl\u00edtj\u00e1k \u00f6ssze egym\u00e1ssal.<\/p>\n<p><\/p>\n<p>A k\u00fcl\u00f6nb\u00f6z\u0151 algoritmusmegval\u00f3s\u00edt\u00e1sok sor\u00e1n, a k\u00fcl\u00f6nb\u00f6z\u0151 nemzeti hagyom\u00e1nyok eset\u00e9n a s\u00falyok nagys\u00e1ga elt\u00e9rhet, de a Unicode szabv\u00e1ny r\u00e9sz\u00e9t k\u00e9pez\u0151 alap s\u00falyt\u00e1bl\u00e1zat \u2014 <em>&quot;Alap\u00e9rtelmezett Unicode Collation Element Table&quot;<\/em> (<em>DUCET<\/em>). Szeretn\u00e9m megjegyezni, hogy a v\u00e1ltoz\u00f3 be\u00e1ll\u00edt\u00e1sa <em>LC_COLLATE<\/em> tulajdonk\u00e9ppen arra utal, hogy a s\u00falyt\u00e1bl\u00e1zat kiv\u00e1laszt\u00e1s\u00e1t a karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00f3 f\u00fcggv\u00e9ny\u00e9ben hat\u00e1rozzuk meg.<\/p>\n<p><\/p>\n<p>S\u00falyoz\u00e1si t\u00e9nyez\u0151k <em>DUCET<\/em> a k\u00f6vetkez\u0151k\u00e9ppen \u00e9p\u00fclnek fel:<\/p>\n<p><\/p>\n<ul>\n<li>az els\u0151 szinten minden bet\u0171t egy szab\u00e1lyos form\u00e1ra hoznak, a diakritikus jeleket figyelmen k\u00edv\u00fcl hagyj\u00e1k, a (nem minden) \u00edr\u00e1sjelet ignor\u00e1lj\u00e1k;<\/li>\n<li>a m\u00e1sodik szinten csak a diakritikus jelek vehet\u0151k figyelembe;<\/li>\n<li>a harmadik szinten csak a nagybet\u0171 \u00e9s kisbet\u0171 figyelhet\u0151 meg;<\/li>\n<li>a negyedik szinten pedig csak az \u00edr\u00e1sjelek sz\u00e1m\u00edtanak.<\/li>\n<\/ul>\n<p><\/p>\n<p>Az \u00f6sszehasonl\u00edt\u00e1s t\u00f6bb l\u00e9p\u00e9sben t\u00f6rt\u00e9nik: el\u0151sz\u00f6r az els\u0151 szint s\u00falyait hasonl\u00edtj\u00e1k \u00f6ssze; ha a s\u00falyok megegyeznek, akkor \u00fajb\u00f3li \u00f6sszehasonl\u00edt\u00e1sra ker\u00fcl sor a m\u00e1sodik szint s\u00falyaival; ezt k\u00f6vet\u0151en, sz\u00fcks\u00e9g szerint, a harmadik \u00e9s negyedik szint s\u00falyaival is.<\/p>\n<p><\/p>\n<p>Az \u00f6sszehasonl\u00edt\u00e1s akkor \u00e9r v\u00e9get, amikor a karakterl\u00e1ncokban megfelel\u0151en elhelyezked\u0151 \u00f6sszehasonl\u00edt\u00f3 egys\u00e9gek tal\u00e1lhat\u00f3k elt\u00e9r\u0151 s\u00falyokkal. Azok a karakterl\u00e1ncok, amelyek minden n\u00e9gy szinten azonos s\u00falyokkal rendelkeznek, egym\u00e1ssal egyenl\u0151ek.<\/p>\n<p><\/p>\n<p>Ez az algoritmus (sok tov\u00e1bbi technikai r\u00e9szlettel) adta a 10. sz\u00e1m\u00fa jelent\u00e9s nev\u00e9t \u2014 <em>&quot;Unicode Collation Algorithm&quot;<\/em> (<em>UCA<\/em>).<\/p>\n<p><\/p>\n<p>Ez a helyzet a p\u00e9ld\u00e1nkban a rendez\u00e9s viselked\u00e9se kicsit \u00e9rthet\u0151bb\u00e9 v\u00e1lik. J\u00f3 lenne \u00f6sszehasonl\u00edtani a Unicode szabv\u00e1nnyal.<\/p>\n<p><\/p>\n<p>A megval\u00f3s\u00edt\u00e1sok tesztel\u00e9s\u00e9re <em>UCA<\/em> l\u00e9tezik egy speci\u00e1lis <noindex><a rel=\"nofollow\" href=\"https:\/\/www.unicode.org\/Public\/UCA\/latest\/CollationTest.html\">teszt<\/a><\/noindex>, amely a <noindex><a rel=\"nofollow\" href=\"http:\/\/www.unicode.org\/Public\/UCA\/latest\/allkeys.txt\">s\u00falyt\u00e1bl\u00e1zatot<\/a><\/noindex>, megval\u00f3s\u00edt\u00f3 <em>DUCET<\/em>. A s\u00falyt\u00e1bl\u00e1zatban k\u00fcl\u00f6nb\u00f6z\u0151 \u00e9rdekess\u00e9gek tal\u00e1lhat\u00f3k. P\u00e9ld\u00e1ul ott van a mahjong kock\u00e1k \u00e9s az eur\u00f3pai domin\u00f3, valamint a k\u00e1rtyapakliban a sz\u00ednek sorrendje (jelv\u00e9ny <em>1F000<\/em> \u00e9s tov\u00e1bb). A k\u00e1rty\u00e1k a bridzs szab\u00e1lyai szerint vannak elhelyezve \u2014 P\u010cBT, a sz\u00ednekben pedig a T,2,3...K sorrendben.<\/p>\n<p><\/p>\n<p>A karakterl\u00e1ncok megfelel\u0151 rendez\u00e9s\u00e9nek manu\u00e1lis ellen\u0151rz\u00e9se <em>DUCET<\/em> meglehet\u0151sen f\u00e1raszt\u00f3 lenne, de szerencs\u00e9re l\u00e9tezik egy kiv\u00e1l\u00f3 p\u00e9lda a Unicode kezel\u00e9s\u00e9re szolg\u00e1l\u00f3 k\u00f6nyvt\u00e1rra \u2014 &quot;<noindex><a rel=\"nofollow\" href=\"http:\/\/site.icu-project.org\/\">Nemzetk\u00f6zi Unicode Komponensek<\/a><\/noindex>&quot; (<em>ICU<\/em>).<\/p>\n<p><\/p>\n<p>Ennek a k\u00f6nyvt\u00e1rnak a weboldal\u00e1n, amelyet a <em>IBM<\/em>, k\u00fcl\u00f6nb\u00f6z\u0151 bemutat\u00f3 oldalak tal\u00e1lhat\u00f3k, t\u00f6bbek k\u00f6z\u00f6tt <noindex><a rel=\"nofollow\" href=\"http:\/\/demo.icu-project.org\/icu-bin\/collation.html\">a karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00f3 algoritmus\u00e1nak oldal\u00e1n.<\/a><\/noindex>Be\u00edrjuk a tesztel\u0151 karakterl\u00e1ncainkat az alap\u00e9rtelmezett be\u00e1ll\u00edt\u00e1sokkal, \u00e9s l\u00e1m, t\u00f6k\u00e9letes orosz rendez\u00e9st kapunk.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Abakanov Mihail;fest\u0151\nJolkina Ella;darukezel\u0151\nIvanov Andrej;szakember\nIvanova Alla;\u00fcgyv\u00e9d<\/code><\/pre>\n<p><\/p>\n<p>Egy\u00e9bk\u00e9nt a weboldalon <em>ICU<\/em> megtal\u00e1lhat\u00f3 a karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1s\u00e1nak m\u0171k\u00f6d\u00e9s\u00e9vel kapcsolatos pontos\u00edt\u00e1s. A p\u00e9ld\u00e1kban <noindex><a rel=\"nofollow\" href=\"http:\/\/userguide.icu-project.org\/collation\/faq\">Collation FAQ<\/a><\/noindex> figyelmen k\u00edv\u00fcl hagyj\u00e1k az aposztr\u00f3fot \u00e9s a k\u00f6t\u0151jelet.<\/p>\n<p><\/p>\n<p>A Unicode seg\u00edtett, de a furcsa viselked\u00e9s okait m\u00e1shol kell keresn\u00fcnk. <em>sort<\/em> be. <em>Linux<\/em> A rendez\u00e9s a glibc-ben<\/p>\n<p><\/p>\n<h1 id=\"sortirovka-v-glibc\">A GNU Core Utils seg\u00e9dprogram forr\u00e1sk\u00f3dj\u00e1nak gyors \u00e1ttekint\u00e9se<\/h1>\n<p><\/p>\n<p>megmutatta, hogy a program lokaliz\u00e1l\u00e1sa l\u00e9nyeg\u00e9ben a v\u00e1ltoz\u00f3 jelenlegi \u00e9rt\u00e9k\u00e9nek ki\u00edrat\u00e1s\u00e1ra korl\u00e1toz\u00f3dik <em>sort<\/em> a <em>hibakeres\u00e9si m\u00f3dban:<\/em> $ sort --debug buhg.txt &gt; buhg.srt\nsort: haszn\u00e1lva az \u2018en_US.UTF8\u2019 rendez\u00e9si szab\u00e1lyokat <em>LC_COLLATE<\/em> A karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1sa a standard<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">strcoll<\/code><\/pre>\n<p><\/p>\n<p>f\u00fcggv\u00e9nnyel t\u00f6rt\u00e9nik, ami azt jelenti, hogy minden \u00e9rdekes a k\u00f6nyvt\u00e1rban tal\u00e1lhat\u00f3. <em>A karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1s\u00e1nak<\/em>egy bekezd\u00e9se <em>glibc-t<\/em>.<\/p>\n<p><\/p>\n<p>Ezen <em>wiki<\/em> Ez a backend az analitika sz\u00e1m\u00e1ra. <em>glibc-t<\/em> . Ebb\u0151l a bekezd\u00e9sb\u0151l meg\u00e9rthetj\u00fck, hogy <noindex><a rel=\"nofollow\" href=\"https:\/\/sourceware.org\/glibc\/wiki\/Locales#LC_COLLATE\">a rendez\u00e9s a m\u00e1r ismert algoritmuson alapul,<\/a><\/noindex>A Unicode rendez\u00e9si algoritmus <em>glibc-t<\/em> ) \u00e9s\/vagy egy ahhoz k\u00f6zeli szabv\u00e1nyon <em>UCA<\/em> (<em>ISO 14651<\/em>Nemzetk\u00f6zi karakterl\u00e1nc sorrend \u00e9s \u00f6sszehasonl\u00edt\u00e1s <em>). Az ut\u00f3bbi szabv\u00e1nyr\u00f3l meg kell jegyezni, hogy a weboldalon<\/em> (<em>standards.iso.org<\/em>hivatalosan is nyilv\u00e1nosnak van nyilv\u00e1n\u00edtva, de a megfelel\u0151 link egy nem l\u00e9tez\u0151 oldalra mutat. A Google n\u00e9h\u00e1ny oldalt ad a hivatalos oldalak linkjeivel, amelyek elektronikus p\u00e9ld\u00e1nyt k\u00edn\u00e1lnak a szabv\u00e1nyr\u00f3l t\u00f6bb mint sz\u00e1z eur\u00f3\u00e9rt, de a keres\u00e9si tal\u00e1latok harmadik-n\u00e9gyedik oldal\u00e1n k\u00f6zvetlen linkek is tal\u00e1lhat\u00f3k <noindex><a rel=\"nofollow\" href=\"https:\/\/standards.iso.org\/ittf\/PubliclyAvailableStandards\">. \u00d6sszess\u00e9g\u00e9ben a szabv\u00e1ny szinte nem k\u00fcl\u00f6nb\u00f6zik a<\/a><\/noindex> <em>). Az ut\u00f3bbi szabv\u00e1nyr\u00f3l meg kell jegyezni, hogy a weboldalon<\/em> -t\u00f3l, de unalmasabban olvashat\u00f3, mivel nem tartalmaz \u00e9l\u00e9nk p\u00e9ld\u00e1kat a karakterl\u00e1ncok sorrendj\u00e9nek nemzeti saj\u00e1toss\u00e1gaira. <em>PDF<\/em>A leg\u00e9rdekesebb inform\u00e1ci\u00f3 a <em>UCA<\/em>volt, amely egy linket tartalmazott a <\/p>\n<p><\/p>\n<p>bugk\u00f6vet\u0151h\u00f6z <em>wiki<\/em> a karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1s\u00e1nak megval\u00f3s\u00edt\u00e1s\u00e1val kapcsolatosan a <noindex><a rel=\"nofollow\" href=\"https:\/\/sourceware.org\/bugzilla\/show_bug.cgi?id=14095\">. A megbesz\u00e9l\u00e9sb\u0151l megtudhatjuk, hogy a<\/a><\/noindex> karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1s\u00e1hoz <em>glibc-t<\/em>egy t\u00e1bl\u00e1zatot haszn\u00e1lnak, <em>glibc-t<\/em> A K\u00f6z\u00f6s Sablon T\u00e1bl\u00e1zat <em>ISO<\/em>CTT <noindex><a rel=\"nofollow\" href=\"http:\/\/www.iso.org\/ittf\/ISO14651_2006_TABLE1_en.txt\">), amelynek c\u00edme az<\/a><\/noindex> (<em>szabv\u00e1ny mell\u00e9klet\u00e9ben<\/em>. 2000 \u00e9s 2015 k\u00f6z\u00f6tt ez a t\u00e1bl\u00e1zat a <em>A<\/em> beli k\u00f3dra vonatkozik. <em>). Az ut\u00f3bbi szabv\u00e1nyr\u00f3l meg kell jegyezni, hogy a weboldalon<\/em>. 2000 \u00e9s 2015 k\u00f6z\u00f6tt ez a t\u00e1bl\u00e1zat <em>glibc-t<\/em> nem volt karbantart\u00f3ja, \u00e9s el\u00e9g sokban elt\u00e9rt (legal\u00e1bbis k\u00fcls\u0151leg) a jelenlegi szabv\u00e1ny v\u00e1ltozat\u00e1t\u00f3l. 2015 \u00e9s 2018 k\u00f6z\u00f6tt zajlott az \u00faj t\u00e1bl\u00e1zat verzi\u00f3j\u00e1ra val\u00f3 alkalmazkod\u00e1s, \u00e9s jelenleg van es\u00e9lyed tal\u00e1lkozni a val\u00f3s \u00e9letben ak\u00e1r az \u00faj t\u00e1bl\u00e1zat (<em>CentOS 8<\/em>), ak\u00e1r a r\u00e9gi (<em>verzi\u00f3ban<\/em>). <\/p>\n<p><\/p>\n<p>Most, hogy minden inform\u00e1ci\u00f3nk megvan az algoritmusr\u00f3l \u00e9s a seg\u00e9dt\u00e1bl\u00e1zatokr\u00f3l, visszat\u00e9rhet\u00fcnk az eredeti probl\u00e9m\u00e1hoz, \u00e9s meg\u00e9rthetj\u00fck, hogyan is kell megfelel\u0151en rendezni a sorokat orosz lokaliz\u00e1ci\u00f3ban.<\/p>\n<p><\/p>\n<h1 id=\"iso-1465114652\">ISO 14651\/14652<\/h1>\n<p><\/p>\n<p>A minket \u00e9rdekl\u0151 t\u00e1bl\u00e1zat forr\u00e1sk\u00f3dja <em>szabv\u00e1ny mell\u00e9klet\u00e9ben<\/em> a legt\u00f6bb disztrib\u00faci\u00f3ban <em>Linux<\/em> a k\u00f6nyvt\u00e1rban tal\u00e1lhat\u00f3 <em>\/usr\/share\/i18n\/locales\/<\/em>. Maga a t\u00e1bl\u00e1zat a f\u00e1jlban tal\u00e1lhat\u00f3 <em>iso14651_t1_common<\/em>. Azt\u00e1n ez a f\u00e1jl a direkt\u00edv\u00e1val <em>copy iso14651_t1_common<\/em> bele van illesztve a f\u00e1jlba <em>iso14651_t1<\/em>, amely viszont be van \u00e1gyazva a nemzeti f\u00e1jlokba, t\u00f6bbek k\u00f6z\u00f6tt a <em>en_US<\/em> \u00e9s <em>ru_RU<\/em>. A legt\u00f6bb disztrib\u00faci\u00f3ban <em>Linux<\/em> minden forr\u00e1sf\u00e1jl benne van az alaptelep\u00edt\u00e9sben, de ha nincsenek ott, akkor egy tov\u00e1bbi csomag telep\u00edt\u00e9s\u00e9re lesz sz\u00fcks\u00e9ged a disztrib\u00faci\u00f3b\u00f3l.<\/p>\n<p><\/p>\n<p>A f\u00e1jl strukt\u00far\u00e1ja <em>iso14651_t1<\/em> els\u0151re rettenetesen sz\u00f3sz\u00e1ty\u00e1rnak t\u0171nhet, nem nyilv\u00e1nval\u00f3 n\u00e9vad\u00e1si szab\u00e1lyokkal, de ha jobban megn\u00e9zed, akkor minden el\u00e9g egyszer\u0171. A strukt\u00far\u00e1t a szabv\u00e1ny \u00edrja le <em>ISO 14652<\/em>, amelynek m\u00e1solat\u00e1t let\u00f6ltheted a <noindex><a rel=\"nofollow\" href=\"http:\/\/www.open-std.org\/JTC1\/SC22\/WG20\/docs\/n972-14652ft.pdf\">open-std.org<\/a><\/noindex>weboldalr\u00f3l. Egy m\u00e1sik f\u00e1jlform\u00e1tum le\u00edr\u00e1s\u00e1t a <noindex><a rel=\"nofollow\" href=\"https:\/\/pubs.opengroup.org\/onlinepubs\/9699919799\/basedefs\/V1_chap07.html\">specifik\u00e1ci\u00f3kban<\/a><\/noindex> <em>POSIX<\/em> t\u00f3l <em>OpenGroup<\/em>oldalon olvashatod. Alternat\u00edvak\u00e9nt a szabv\u00e1ny olvas\u00e1sa helyett a <em>collate_read<\/em> be. <em>glibc\/locale\/programs\/ld-collate.c<\/em>.<\/p>\n<p><\/p>\n<p>funkci\u00f3 forr\u00e1sk\u00f3dj\u00e1t tanulm\u00e1nyozhatod. A f\u00e1jl strukt\u00far\u00e1ja a k\u00f6vetkez\u0151k\u00e9ppen n\u00e9z ki:<\/p>\n<p><\/p>\n<p>Alap\u00e9rtelmez\u00e9s szerint a  karaktert escape karakterk\u00e9nt haszn\u00e1ljuk, \u00e9s a sor v\u00e9ge a # karakter ut\u00e1n kommentk\u00e9nt szerepel. Mindk\u00e9t karaktert fel\u00fcl lehet \u00edrni, ahogyan ez a t\u00e1bl\u00e1zat \u00faj verzi\u00f3j\u00e1ban is megt\u00f6rt\u00e9nt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">escape_char \/\ncomment_char %<\/code><\/pre>\n<p><\/p>\n<p>A f\u00e1jlban tal\u00e1lkozhatsz tokens form\u00e1tum\u00e1val <em>&lt;Uxxxx&gt;<\/em> vagy <em>&lt;Uxxxxxxxx&gt;<\/em> (ahol \u2014 hexadecim\u00e1lis sz\u00e1mjegy). Ez a hexadecim\u00e1lis \u00e1br\u00e1zol\u00e1s a Unicode k\u00f3dpontjaira a <em>x<\/em> UCS-4 <em>UTF-32<\/em> (<em>). Minden egy\u00e9b elem sz\u00f6gletes z\u00e1r\u00f3jelben (bele\u00e9rtve a<\/em>). Minden egy\u00e9b elem sz\u00f6gletes z\u00e1r\u00f3jelben (bele\u00e9rtve <em>&lt;Uxxxx_xxxx&gt;<\/em>, <em>\u00e9s hasonl\u00f3k) egyszer\u0171 sz\u00f6veges konstansnak sz\u00e1m\u00edtanak, amelyeknek nincs k\u00fcl\u00f6n\u00f6sebb \u00e9rtelm\u00fck a kontextuson k\u00edv\u00fcl.<\/em> Azt mondja nek\u00fcnk, hogy a k\u00f6vetkez\u0151 adatok az \u00f6sszehasonl\u00edt\u00f3 sz\u00f6vegek le\u00edr\u00e1s\u00e1t kezdik.<\/p>\n<p><\/p>\n<p>A sor <em>LC_COLLATE<\/em> El\u0151sz\u00f6r meg kell hat\u00e1rozni a s\u00falyok neveit az \u00f6sszehasonl\u00edt\u00f3 t\u00e1bl\u00e1zatban \u00e9s a karakterkombin\u00e1ci\u00f3k neveit. \u00c1ltal\u00e1noss\u00e1gban k\u00e9tf\u00e9le n\u00e9v tartozik k\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 entit\u00e1shoz, de a t\u00e9nyleges f\u00e1jlban ezek keverve vannak. A s\u00falyok neveit a k\u00f6vetkez\u0151 kulcssz\u00f3 hat\u00e1rozza meg:<\/p>\n<p><\/p>\n<p>collating-symbol <em>kollekci\u00f3s szimb\u00f3lum<\/em> (\u00f6sszehasonl\u00edt\u00f3 jel), mivel az azonos s\u00faly\u00fa Unicode karakterek egyen\u00e9rt\u00e9k\u0171nek sz\u00e1m\u00edtanak az \u00f6sszehasonl\u00edt\u00e1s sor\u00e1n.<\/p>\n<p><\/p>\n<p>A szakasz teljes hossza a f\u00e1jl aktu\u00e1lis rev\u00edzi\u00f3j\u00e1ban k\u00f6r\u00fclbel\u00fcl 900 sor. P\u00e9ld\u00e1kat gy\u0171jt\u00f6ttem t\u00f6bb helyr\u0151l, hogy megmutassam a nevek \u00f6nk\u00e9nyess\u00e9g\u00e9t \u00e9s n\u00e9h\u00e1ny nyelvtani mint\u00e1t.<\/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; % Garant\u00e1lt legnagyobb szimb\u00f3lum \u00e9rt\u00e9k. Tartsd a lista v\u00e9g\u00e9n.\n...\ncollating-element &lt;U0413_0301&gt; from &quot;&lt;U0413&gt;&lt;U0301&gt;&quot;\ncollating-element &lt;U0413_0341&gt; from &quot;&lt;U0413&gt;&lt;U0341&gt;&quot;<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><em>collating-symbol<\/em> regisztr\u00e1lja a karakterl\u00e1ncot <em>OSMANYA<\/em> a s\u00falynevek t\u00e1bl\u00e1j\u00e1ban <\/li>\n<li><em>collating-symbol ..<\/em> regisztr\u00e1lja a nevek szekvenci\u00e1j\u00e1t, amely egy el\u0151tagb\u00f3l \u00e1ll <em>S<\/em> \u00e9s egy hexadecim\u00e1lis numerikus ut\u00f3tagb\u00f3l <em>1D000<\/em> t\u00f3l <em>1D35F<\/em>.<\/li>\n<li><em>FFFF<\/em> be. <em>collating-symbol<\/em> nagy pozit\u00edv eg\u00e9sz sz\u00e1mnak t\u0171nik hexadecim\u00e1lis sz\u00e1mrendszerben, de <em>&lt;SFFFF&gt;<\/em> ez csak egy n\u00e9v, ami \u00fagy n\u00e9zhet ki, mint <em>&lt;VERYBIGVAL&gt;<\/em> <\/li>\n<li>n\u00e9v <em>&lt;U0413&gt;<\/em> a k\u00f3dpont k\u00f3dol\u00e1sa jelenti <em>UTF-32<\/em><\/li>\n<li><em>collating-element &lt;U0413_0301&gt; from &quot;&lt;U0413&gt;&lt;U0301&gt;&quot;<\/em> \u00faj nevet regisztr\u00e1l a k\u00e9t Unicode pont sz\u00e1m\u00e1ra. <\/li>\n<\/ul>\n<p><\/p>\n<p>Amikor a s\u00falyok nevei meghat\u00e1rozva vannak, akkor megadhat\u00f3k maguk a s\u00falyok. Mivel az \u00f6sszehasonl\u00edt\u00e1s sor\u00e1n csak a nagyobb-kisebb viszonyok sz\u00e1m\u00edtanak, a s\u00falyokat egy egyszer\u0171 n\u00e9vsorral hat\u00e1rozz\u00e1k meg. El\u0151sz\u00f6r a &quot;k\u00f6nnyebb&quot; s\u00falyokat sorolj\u00e1k fel, majd a nehezebb s\u00falyokat. Eml\u00e9keztetn\u00e9k, hogy minden Unicode karakterhez n\u00e9gy k\u00fcl\u00f6nb\u00f6z\u0151 s\u00falyt rendelnek. Ezeket egyetlen, rendezett sorozatba gy\u0171jt\u00f6tt\u00e9k. Elm\u00e9letileg b\u00e1rmely karakteres n\u00e9v haszn\u00e1lhat\u00f3 b\u00e1rmelyik n\u00e9gy szinten, de a megjegyz\u00e9sek szerint a fejleszt\u0151k ment\u00e1lisan szintenk\u00e9nt osztj\u00e1k meg a neveket.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">% Szimbolikus s\u00faly besorol\u00e1sok\n\n% Harmadik szint\u0171 s\u00faly besorol\u00e1sok\n\n\n\n\n...\n% M\u00e1sodik szint\u0171 s\u00faly besorol\u00e1sok\n\n % \u00d6SSZEF\u0170Z\u0150 ALACSONY VONAL\n % \u00d6SSZEF\u0170Z\u0150 FELS\u0150 VESSZ\u0150\n % \u00d6SSZEF\u0170Z\u0150 FORD\u00cdTOTT FELS\u0150 VESSZ\u0150\n...\n% Els\u0151 szint\u0171 s\u00faly besorol\u00e1sok\n % HORIZONT\u00c1LIS TABUL\u00c1CI\u00d3\n % \u00daJSOR\n % VERTIK\u00c1LIS TABUL\u00c1CI\u00d3\n...\n % CIRILL KIS BET\u0170 DE\n % CIRILL KIS BET\u0170 KOMI DE\n % CIRILL KIS BET\u0170 DJE\n % CIRILL KIS BET\u0170 KOMI DJE\n % CIRILL KIS BET\u0170 GJE\n % CIRILL KIS BET\u0170 ZE LEFOKOZ\u00d3VAL\n % CIRILL KIS BET\u0170 IE\n % CIRILL KIS BET\u0170 IE BREVE-TEL\n % CIRILL KIS BET\u0170 UKR\u00c1N IE\n % CIRILL KIS BET\u0170 ZHE<\/code><\/pre>\n<p><\/p>\n<p>V\u00e9gre itt a s\u00falyt\u00e1bl\u00e1zat.<\/p>\n<p><\/p>\n<p>A s\u00faly szakasz kulcsszavakkal van z\u00e1rva sorokba <em>order_start<\/em> \u00e9s <em>order_end<\/em>. Tov\u00e1bbi param\u00e9terek <em>order_start<\/em> meghat\u00e1rozz\u00e1k, hogy az egyes \u00f6sszehasonl\u00edt\u00e1si szinteken melyik ir\u00e1nyba n\u00e9znek a sorok. Alap\u00e9rtelmezetten a <em>forward<\/em>param\u00e9ter van haszn\u00e1latban. A szakasz t\u00f6rzse olyan sorokb\u00f3l \u00e1ll, amelyek a karakterk\u00f3dot \u00e9s n\u00e9gy s\u00faly\u00e1t tartalmazz\u00e1k. A karakterk\u00f3dot a karakter maga, a k\u00f3dpont vagy egy kor\u00e1bban meghat\u00e1rozott szimbolikus n\u00e9v k\u00e9pviselheti. A s\u00falyok szint\u00e9n megadhat\u00f3k szimbolikus nevekkel, k\u00f3dpontokkal vagy magukkal a karakterekkel. Ha k\u00f3dpontokat vagy karaktereket haszn\u00e1lnak, akkor a s\u00falyuk megegyezik a k\u00f3dpont numerikus \u00e9rt\u00e9k\u00e9vel (a Unicode t\u00e1bl\u00e1zat poz\u00edci\u00f3j\u00e1val). Az egy\u00e9rtelm\u0171en nem felt\u00fcntetett karaktereket (ahogyan \u00e9n \u00e9rtem) \u00fagy kezelik, hogy a t\u00e1bl\u00e1zatban az els\u0151dleges s\u00falyuk megegyezik a Unicode t\u00e1bl\u00e1zat poz\u00edci\u00f3j\u00e1val. A speci\u00e1lis s\u00faly\u00e9rt\u00e9k <em>IGNORE<\/em> azt jelenti, hogy az adott \u00f6sszehasonl\u00edt\u00e1si szinten az adott karaktert figyelmen k\u00edv\u00fcl hagyj\u00e1k.<\/p>\n<p><\/p>\n<p>A s\u00falyok szerkezet\u00e9nek bemutat\u00e1s\u00e1hoz h\u00e1rom el\u00e9gg\u00e9 nyilv\u00e1nval\u00f3 szakaszt v\u00e1lasztottam:<\/p>\n<p><\/p>\n<ul>\n<li>azok a karakterek, amelyeket teljesen figyelmen k\u00edv\u00fcl hagynak<\/li>\n<li>a h\u00e1romsz\u00e1mmal egyen\u00e9rt\u00e9k\u0171 karakterek az els\u0151 k\u00e9t szinten<\/li>\n<li>a cirill \u00e1b\u00e9c\u00e9 kezdete, amely nem tartalmaz diakritikus jeleket, ez\u00e9rt alapvet\u0151en az els\u0151 \u00e9s harmadik szint szerint rendez\u0151dik.<\/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>Most visszat\u00e9rhet\u00fcnk a cikk elej\u00e9n tal\u00e1lhat\u00f3 p\u00e9ld\u00e1k rendez\u00e9s\u00e9hez. A csapda itt rejlik a s\u00falyt\u00e1bla ezen r\u00e9sz\u00e9ben:<\/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>Nyilv\u00e1nval\u00f3, hogy ebben a t\u00e1bl\u00e1zatban a \u00edr\u00e1sjelek a t\u00e1bl\u00e1zatb\u00f3l sz\u00e1rmaznak. <em>ASCII<\/em> (a sz\u00f3k\u00f6zt is bele\u00e9rtve) a karakterek \u00f6sszehasonl\u00edt\u00e1s\u00e1n\u00e1l szinte mindig figyelmen k\u00edv\u00fcl van hagyva. Kiv\u00e9telt k\u00e9peznek azok a karakterl\u00e1ncok, amelyek mindenben megegyeznek, kiv\u00e9ve az azonos poz\u00edci\u00f3kban tal\u00e1lhat\u00f3 \u00edr\u00e1sjeleket. Az \u00e9n p\u00e9ld\u00e1m karakterl\u00e1ncai (a rendez\u00e9s ut\u00e1n) a k\u00f6vetkez\u0151k\u00e9ppen n\u00e9znek ki az \u00f6sszehasonl\u00edt\u00f3 algoritmus sz\u00e1m\u00e1ra:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">Abakanov Mih\u00e1ly fest\u0151\nJelkin Andr\u00e9a lakatos\nIvanov Anna fest\u0151\nIvanov Andr\u00e1s \u00e1cs<\/code><\/pre>\n<p><\/p>\n<p>Figyelembe v\u00e9ve, hogy a s\u00falyt\u00e1bl\u00e1zatban a nagybet\u0171k a cirill \u00e1b\u00e9c\u00e9ben a kisbet\u0171k ut\u00e1n k\u00f6vetkeznek (a harmadik szinten <em>&lt;CAP&gt;<\/em> nehezebb, mint <em>&lt;MIN&gt;<\/em>), a rendez\u00e9s teljesen helyesnek t\u0171nik.<\/p>\n<p><\/p>\n<p>Amikor a v\u00e1ltoz\u00f3t <em>LC_COLLATE=C<\/em> be\u00e1ll\u00edtjuk, egy speci\u00e1lis t\u00e1bl\u00e1zat t\u00f6lt\u0151dik be, amely byte-alap\u00fa \u00f6sszehasonl\u00edt\u00e1st hat\u00e1roz meg.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">static const uint32_t collseqwc[] =\n{\n  8, 1, 8, 0x0, 0xff,\n  \/* 1st-level table *\/\n  6 * sizeof (uint32_t),\n  \/* 2nd-level table *\/\n  7 * sizeof (uint32_t),\n  \/* 3rd-level table *\/\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'fe', L'xff'\n};<\/code><\/pre>\n<p><\/p>\n<p>Mivel a Unicode-ban a \u0401 k\u00f3dpont megel\u0151zi az A bet\u0171t, az azonos\u00edthat\u00f3 karakterl\u00e1ncok ennek megfelel\u0151en rendez\u0151dnek.<\/p>\n<p><\/p>\n<h1 id=\"tekstovye-i-dvoichnye-tablicy\">Sz\u00f6veges \u00e9s bin\u00e1ris t\u00e1bl\u00e1k.<\/h1>\n<p><\/p>\n<p>Nyilv\u00e1nval\u00f3, hogy a karakterl\u00e1ncok \u00f6sszehasonl\u00edt\u00e1sa egy rendk\u00edv\u00fcl gyakori m\u0171velet, m\u00edg a t\u00e1bl\u00e1zat elemz\u00e9se <em>szabv\u00e1ny mell\u00e9klet\u00e9ben<\/em> meglehet\u0151sen k\u00f6lts\u00e9ges elj\u00e1r\u00e1s. A t\u00e1bl\u00e1hoz val\u00f3 hozz\u00e1f\u00e9r\u00e9s optimaliz\u00e1l\u00e1s\u00e1hoz a parancsot bin\u00e1ris form\u00e1ba ford\u00edtja. <em>localedef<\/em>.<\/p>\n<p><\/p>\n<p>A parancs <em>localedef<\/em> param\u00e9terekk\u00e9nt egy nemzeti jellemz\u0151it tartalmaz\u00f3 f\u00e1jlt (opci\u00f3 <em>-i<\/em>), amelyben az \u00f6sszes karakter Unicode-pontokkal van \u00e1br\u00e1zolva, \u00e9s egy f\u00e1jlt, amely a Unicode-pontok meghat\u00e1rozott karakterk\u00f3dol\u00e1s\u00e1ra vonatkozik (opci\u00f3 <em>-f<\/em>). A m\u0171velet sor\u00e1n bin\u00e1ris f\u00e1jlokat hozhatunk l\u00e9tre az adott nyelvhez, az utols\u00f3 param\u00e9terben megadott n\u00e9vvel.<\/p>\n<p><\/p>\n<p><em>Glibc<\/em> t\u00e1mogatja a k\u00e9t form\u00e1tum\u00fa bin\u00e1ris f\u00e1jlokat: &quot;hagyom\u00e1nyos&quot; \u00e9s &quot;modern&quot;.<\/p>\n<p><\/p>\n<p>A hagyom\u00e1nyos form\u00e1tumot felt\u00e9telezi, hogy a nyelvi n\u00e9v egy almappa neve a <em>\/usr\/lib\/locale\/<\/em>. Ebben az almapp\u00e1ban tal\u00e1lhat\u00f3k a bin\u00e1ris f\u00e1jlok. <em>LC_COLLATE<\/em>, <em>LC_CTYPE<\/em>, <em>LC_TIME<\/em> stb. A f\u00e1jl <em>LC_IDENTIFICATION<\/em> tartalmazza a nyelvi k\u00f6rnyezet hivatalos nev\u00e9t (amely elt\u00e9rhet az almappa nev\u00e9t\u0151l) \u00e9s megjegyz\u00e9seket.<\/p>\n<p><\/p>\n<p>A modern form\u00e1tum azt felt\u00e9telezi, hogy minden nyelvi k\u00f6rnyezet egy k\u00f6z\u00f6s arch\u00edvumban lesz t\u00e1rolva, <em>\/usr\/lib\/locale\/locale-archive<\/em>, amelyet a virtu\u00e1lis mem\u00f3ria minden olyan folyamat sz\u00e1m\u00e1ra el\u00e9rhet\u0151v\u00e9 tesz, amely haszn\u00e1lja. <em>glibc-t<\/em>. A modern locale name undergoes some canonicalization \u2014 only digits and letters, converted to lowercase, remain in encoding names. Thus <em>hu_HU.KOI8-R<\/em>, it will be saved as <em>hu_HU.koi8r<\/em>.<\/p>\n<p><\/p>\n<p>Input files are searched in the current directory as well as in the directories <em>\/usr\/share\/i18n\/locales\/<\/em> \u00e9s <em>\/usr\/share\/i18n\/charmaps\/<\/em> for files <em>szabv\u00e1ny mell\u00e9klet\u00e9ben<\/em> and encoding files, respectively.<\/p>\n<p><\/p>\n<p>For example, the command<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">localedef -i hu_HU -f MAC-CYRILLIC hu_HU.MAC-CYRILLIC<\/code><\/pre>\n<p><\/p>\n<p>will compile a file <em>\/usr\/share\/i18n\/locales\/ru_RU<\/em> using the encoding file <em>\/usr\/share\/i18n\/charmaps\/MAC-CYRILLIC.gz<\/em> and will save the result in <em>\/usr\/lib\/locale\/locale-archive<\/em> under the name <em>hu_HU.maccyrillic<\/em><\/p>\n<p><\/p>\n<p>If you set the variable <em>LANG=en_US.UTF-8<\/em> then <em>glibc-t<\/em> it will look for binary locale files in the following sequence of files and directories:<\/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>If a locale appears in both traditional and modern formats, priority is given to the modern one.<\/p>\n<p><\/p>\n<p>You can view the list of compiled locales with the command <em>locale -a<\/em>.<\/p>\n<p><\/p>\n<h1 id=\"podgotovka-svoey-tablicy-sravneniya\">Preparing your comparison table<\/h1>\n<p><\/p>\n<p>Now, armed with knowledge, you can create your own ideal string comparison table. This table should correctly compare Russian letters, including the letter \u0401, while considering punctuation marks according to the table. <em>ASCII<\/em>.<\/p>\n<p><\/p>\n<p>The process of preparing your sorting table consists of two stages: editing the weight table and compiling it into binary form with the command <em>localedef<\/em>.<\/p>\n<p><\/p>\n<p>To allow the comparison table to be adjusted with minimal editing costs, the format <em>ISO 14652<\/em> provides sections for adjusting the weights of the existing table. The section begins with the keyword <em>reorder-after<\/em> and an indication of the position after which the replacement is made. The section ends with the line <em>reorder-end<\/em>. If you need to adjust multiple sections of the table, a section is created for each of these areas.<\/p>\n<p><\/p>\n<p>I copied the new versions of the files <em>iso14651_t1_common<\/em> \u00e9s <em>ru_RU<\/em> from the repository <em>glibc-t<\/em> to my home directory ~\/local\/share\/i18n\/locales\/ and slightly edited the section <em>LC_COLLATE<\/em> be. <em>ru_RU<\/em>. The new versions of the files are fully compatible with my version <em>glibc-t<\/em>. If you want to use the old versions of the files, you will need to change the symbolic names and the place from which the replacement in the table begins.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">LC_COLLATE\n% M\u00e1sold a sablont ISO\/IEC 14651-b\u0151l\nm\u00e1sold &quot;iso14651_t1&quot;\nsorrend ut\u00e1n &lt;U000D&gt;\n&lt;U0020&gt; &lt;S0020&gt;;&lt;BASE&gt;;&lt;MIN&gt;&lt;U0020&gt; % T\u00c9R\n&lt;U0021&gt; &lt;S0021&gt;;&lt;BASE&gt;&lt;MIN&gt;&lt;U0021&gt; % FELKI\u00c1LT\u00d3JEL\n&lt;U0022&gt; &lt;S0022&gt;;&lt;BASE&gt;&lt;MIN&gt;&lt;U0022&gt; % ID\u00c9Z\u0150JEL\n...\n&lt;U007D&gt; &lt;S007D&gt;;&lt;BASE&gt;&lt;MIN&gt;&lt;U007D&gt; % JOBB KANYAR B\u0150R\n&lt;U007E&gt; &lt;S007E&gt;;&lt;BASE&gt;&lt;MIN&gt;&lt;U007E&gt; % HULL\u00c1MOS\nsorrend v\u00e9ge\nEND LC_COLLATE<\/code><\/pre>\n<p><\/p>\n<p>Val\u00f3j\u00e1ban a mez\u0151ket kellett volna megv\u00e1ltoztatni <em>LC_IDENTIFICATION<\/em> \u00fagy, hogy a helyi be\u00e1ll\u00edt\u00e1sra mutassanak <em>hu_HU<\/em>, de az \u00e9n p\u00e9ld\u00e1mban nem volt sz\u00fcks\u00e9g r\u00e1, mivel kiz\u00e1rtam a helyi be\u00e1ll\u00edt\u00e1sok keres\u00e9s\u00e9b\u0151l a <em>locale-archive<\/em>.<\/p>\n<p><\/p>\n<p>Ahhoz, hogy <em>localedef<\/em> a f\u00e1jlokat a mapp\u00e1mban a <em>I18NPATH<\/em> v\u00e1ltoz\u00f3n kereszt\u00fcl, egy tov\u00e1bbi k\u00f6nyvt\u00e1r hozz\u00e1ad\u00e1s\u00e1val lehet keresni a bemeneti f\u00e1jlokhoz, \u00e9s a bin\u00e1ris f\u00e1jlok t\u00e1rol\u00e1s\u00e1ra szolg\u00e1l\u00f3 k\u00f6nyvt\u00e1r megadhat\u00f3 '\/'-al elv\u00e1lasztott \u00fatk\u00e9nt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; I18NPATH=~\/.local\/share\/i18n localedef -i hu_HU -f UTF-8 ~\/.local\/lib\/locale\/hu_HU.UTF-8<\/code><\/pre>\n<p><\/p>\n<p><em>POSIX<\/em> azt felt\u00e9telezi, hogy a <em>LANG<\/em> teljes \u00fatvonalakat lehet \u00edrni a helyi be\u00e1ll\u00edt\u00e1sok f\u00e1jlok k\u00f6nyvt\u00e1raihoz, amelyek a '\/'-ral kezd\u0151dnek, de <em>glibc-t<\/em> be. <em>Linux<\/em> minden \u00fatvonalat az alap k\u00f6nyvt\u00e1rt\u00f3l sz\u00e1m\u00edt, amelyet a <em>LOCPATH<\/em>v\u00e1ltoz\u00f3 seg\u00edts\u00e9g\u00e9vel lehet fel\u00fcl\u00edrni. A be\u00e1ll\u00edt\u00e1s ut\u00e1n <em>LOCPATH=~\/.local\/lib\/locale\/<\/em> minden, a lokaliz\u00e1l\u00e1ssal kapcsolatos f\u00e1jl csak a mapp\u00e1mban lesz keresve. A helyi be\u00e1ll\u00edt\u00e1sok arch\u00edvum\u00e1t a be\u00e1ll\u00edtott v\u00e1ltoz\u00f3val <em>LOCPATH<\/em> figyelmen k\u00edv\u00fcl hagy\u00e1sra ker\u00fcl.<\/p>\n<p><\/p>\n<p>\u00cdme a d\u00f6nt\u0151 teszt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LANG=hu_HU.UTF-8 LOCPATH=~\/.local\/lib\/locale\/ sort buhg.txt\nAbak\u00e1nov Mih\u00e1ly;fest\u0151\nJelkinina Ella;darukezel\u0151\nIvanov Andr\u00e1s;kov\u00e1cs\nIvanova Alla;\u00fcgyv\u00e9d<\/code><\/pre>\n<p><\/p>\n<p>Hurr\u00e1! Siker\u00fclt!<\/p>\n<p><\/p>\n<h1 id=\"rabota-nad-oshibkami\">A hib\u00e1k jav\u00edt\u00e1sa<\/h1>\n<p><\/p>\n<p>M\u00e1r v\u00e1laszoltam a sz\u00e1lak rendez\u00e9s\u00e9vel kapcsolatos k\u00e9rd\u00e9sekre, de m\u00e9g mindig van n\u00e9h\u00e1ny k\u00e9rd\u00e9s a l\u00e1that\u00f3 \u00e9s l\u00e1thatatlan hib\u00e1kr\u00f3l.<\/p>\n<p><\/p>\n<p>T\u00e9rj\u00fcnk vissza az eredeti feladathoz.<\/p>\n<p><\/p>\n<p>\u00c9s a program <em>sort<\/em> \u00e9s a program <em>join<\/em> ugyanazokat a sz\u00f6veg\u00f6sszehasonl\u00edt\u00f3 funkci\u00f3kat haszn\u00e1lja a <em>glibc-t<\/em>. Hogyan lehetett az, hogy <em>join<\/em> hib\u00e1t adott a rendez\u00e9s sor\u00e1n a <em>sort<\/em> mellett a helyi be\u00e1ll\u00edt\u00e1sokban <em>en_US.UTF-8<\/em>? \u041e\u0442\u0432\u0435\u0442 \u043f\u0440\u043e\u0441\u0442: <em>sort<\/em> teljesen hasonl\u00edt, m\u00edg <em>join<\/em> csak a kulcsot hasonl\u00edtja \u00f6ssze, amely alap\u00e9rtelmezetten a sor els\u0151 sz\u00f3k\u00f6zig terjed. Az \u00e9n p\u00e9ld\u00e1mban ez hiba\u00fczenethez vezetett, mivel a kezdeti szavak rendez\u00e9se nem egyezett meg a teljes sorok rendez\u00e9s\u00e9vel.<\/p>\n<p><\/p>\n<p>A helyi be\u00e1ll\u00edt\u00e1s <em>&quot;C&quot;<\/em> garant\u00e1lja, hogy a rendezett sz\u00e1lak els\u0151 r\u00e9szei az els\u0151 sz\u00f3k\u00f6zig rendezve lesznek, de ez csak eltakarja a hib\u00e1t. Olyan adatokat lehet tal\u00e1lni (azonos vezet\u00e9knev\u0171 emberek, de k\u00fcl\u00f6nb\u00f6z\u0151 keresztnevekkel), amelyek hiba\u00fczenet n\u00e9lk\u00fcl is helytelen eredm\u00e9nyt adnak a f\u00e1jlok \u00f6sszef\u0171z\u00e9s\u00e9hez. Ha azt szeretn\u00e9nk, hogy <em>join<\/em> Ha a f\u00e1jlok sorait n\u00e9v szerint egyes\u00edti, a helyes m\u00f3dszer a mez\u0151elv\u00e1laszt\u00f3 egy\u00e9rtelm\u0171 megad\u00e1sa \u00e9s a kulcsmez\u0151 szerinti rendez\u00e9s, nem pedig az eg\u00e9sz sor szerint. Ebben az esetben a f\u00fazi\u00f3 helyesen fog v\u00e9gbemenni, \u00e9s egyetlen lokaliz\u00e1ci\u00f3ban sem lesz hiba:<\/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>Sikeresen v\u00e9grehajtott p\u00e9lda a k\u00f3dol\u00e1sban <em>CP1251<\/em> tov\u00e1bbi egy hib\u00e1t tartalmaz. A helyzet az, hogy az \u00e1ltalam ismert \u00f6sszes disztrib\u00faci\u00f3ban <em>Linux<\/em> a csomagokb\u00f3l hi\u00e1nyzik a leford\u00edtott lokalit\u00e1s <em>hu_HU.CP1251<\/em>. Ha a leford\u00edtott lokalit\u00e1s nem tal\u00e1lhat\u00f3, akkor <em>sort<\/em> csendben byte-\u00f6sszehasonl\u00edt\u00e1st v\u00e9gez, ahogyan ezt \u00e9szlelt\u00fck.<\/p>\n<p><\/p>\n<p>Egy\u00e9bk\u00e9nt van egy kis hiba is, ami a leford\u00edtott lokalit\u00e1sok hi\u00e1ny\u00e1hoz kapcsol\u00f3dik. A parancs <em>LOCPATH=\/tmp locale -a<\/em> feln\u0151tt minden lokalit\u00e1s list\u00e1j\u00e1t fogja kiadni <em>locale-archive<\/em>, de a be\u00e1ll\u00edtott v\u00e1ltoz\u00f3val <em>LOCPATH<\/em> minden program sz\u00e1m\u00e1ra (bele\u00e9rtve mag\u00e1t is <em>locale<\/em>) ezek a lokalit\u00e1sok nem lesznek el\u00e9rhet\u0151k.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$&gt; LOCPATH=\/tmp locale -a | grep en_US\nlocale: Cannot set LC_CTYPE to default locale: No such file or directory\nlocale: Cannot set LC_MESSAGES to default locale: No such file or directory\nlocale: Cannot set LC_COLLATE to default locale: No such file or directory\nen_US\nen_US.iso88591\nen_US.iso885915\nen_US.utf8\n\n$&gt; LC_COLLATE=en_US.UTF-8 sort --debug\nsort: using \u2018en_US.UTF-8\u2019 sorting rules\n\n$&gt; LOCPATH=\/tmp LC_COLLATE=en_US.UTF-8 sort --debug\nsort: using simple byte comparison<\/code><\/pre>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Z\u00e1r\u00e1s<\/h1>\n<p><\/p>\n<p>Ha \u00d6n programoz\u00f3, aki azt hiszi, hogy a sorok byte-ok halmaza, akkor az \u00d6n v\u00e1laszt\u00e1sa <em>LC_COLLATE=C<\/em>.<\/p>\n<p><\/p>\n<p>Ha \u00d6n nyelv\u00e9sz vagy sz\u00f3t\u00e1rszerkeszt\u0151, akkor jobb, ha saj\u00e1t lokalit\u00e1s\u00e1t leford\u00edtja.<\/p>\n<p><\/p>\n<p>Ha \u00d6n egyszer\u0171 felhaszn\u00e1l\u00f3, akkor meg kell szoknia, hogy a parancs <em>ls -a<\/em> f\u00e1jlokat ad ki, amelyek ponttal kezd\u0151dnek, amig a bet\u0171vel kezd\u0151d\u0151 f\u00e1jlokkal vegyesen, \u00e9s <em>Midnight Commander<\/em>, ami saj\u00e1t bels\u0151 funkci\u00f3it haszn\u00e1lja a nevek rendez\u00e9s\u00e9re, a ponttal kezd\u0151d\u0151 f\u00e1jlokat a lista elej\u00e9re helyezi.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Hivatkoz\u00e1sok<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/unicode.org\/reports\/tr10\/\">Jelent\u00e9s \u211610 Unicode collation algoritmus <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.unicode.org\/Public\/UCA\/latest\/allkeys.txt\">A karakterek s\u00falyai a unicode.org oldalon <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/userguide.icu-project.org\/intro\"><em>ICU<\/em> \u2014 a Unicode kezel\u00e9s\u00e9re ir\u00e1nyul\u00f3 IBM k\u00f6nyvt\u00e1r implement\u00e1ci\u00f3ja. <\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/demo.icu-project.org\/icu-bin\/collation.html\">Rendez\u00e9si teszt <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\">A karakterek s\u00falyai a <em>). Az ut\u00f3bbi szabv\u00e1nyr\u00f3l meg kell jegyezni, hogy a weboldalon<\/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\">A s\u00falyok f\u00e1jlform\u00e1tum\u00e1nak le\u00edr\u00e1sa <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\">A sorok \u00f6sszehasonl\u00edt\u00e1s\u00e1nak megvitat\u00e1sa a <em>glibc-t<\/em><\/a><\/noindex><\/p>\n<p>Forr\u00e1s: <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 5.0.5 - 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.\" \/>\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\/hu\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/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\udd47Hogyan rendezi a Linux-sort a sorokat | ProHoster","description":"Bevezet\u00e9s Minden egy r\u00f6vid szkripttel kezd\u0151d\u00f6tt, amely \u00f6sszegy\u0171jt\u00f6tte a dolgoz\u00f3k e-mail c\u00edmeit a levelez\u0151list\u00e1r\u00f3l, amelyet","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-linuxovskij-sort-sortiruet-stroki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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.","og:url":"https:\/\/prohoster.info\/hu\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/83055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=83055"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/83055\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=83055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=83055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=83055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}