Նշված էջում ամեն մի ընտրատարածքի համար նախատեսված է համարակալված պանակ, որի մեջ առանձին Microsoft Excel ֆայլերով տրված են ընտրատեղամասերի ընտրողների ցուցակները։ (Օրինակ, ես գրանցված եմ 39-րդ ընտրատարածքի 18-րդ ընտրատեղամասում։ Հետևաբար իմ տվյալները պետք է որոնեմ 39 համարով պանակի
39_18.xls
ֆայլում։) Նախ, իմ աշխատանքային պանակում ստեղծեցի uniquenames
անունով մի պանակ և այն դարձրեցի ընթացիկ։
mkdir uniquenames cd uniquenamesԱյնուհետև
wget
ծրագրով համակարգիչ բեռնեցի 39-րդ պանակի բոլոր ֆայլերը․
wget -r -np -A '*.xls' http://www.police.am/yntrutyunner/39/Այս հրամանի կատարումից հետո
uniquenames
պանակում ստեղվեց բեռնված պանակների հիերարխիա՝ www.police.am/yntrutyunner/39/
ճանապարհով։
Հարմարության համար բոլոր xls
ֆայլերը պատճենեցի ընթացիկ պանակի մեջ․
cp www.police.am/yntrutyunner/39/*.xls .Excel ֆայլերի հետ աշխատելու ոչ մի ցանկություն չունեմ, հետևաբար դրանք պետք է փոխարինել մի որևէ պարզ ֆորմատի։ Ես ընտրեցի ստորակետով բաժանված դաշտերով (csv) ֆորմատը։ Իսկ քանի որ ֆայլերում ինֆորմացիան գրված է ArmSCII-8 կոդավորմամբ, նաև պետք է ձևափոխություն կատարել Utf-8 կոդավորման։ Իմ Ubuntu 12.04 համակարգում տեղադրված է LibreOffice 3.5 փաթեթը, որի Calc ծրագիրը կարողանում է բացել Microsoft Excel ֆայլերը։ Բայց քանի որ ֆայլերը շատ են, ձևափոխությունը ավելի հարմար է անել հրամանային տողից։ Պանակի բոլոր Excel ֆայլը csv ֆայլերի փոխարինելու համար պետք է գրել հետևյալ հրամանը․
libreoffice --nologo --calc --convert-to csv *.xlsՍտեղծվում են
*.csv
ընդլայնումով ֆայլեր, որոնց պարունակությունը ArmSCII-8 կոդավորմամբ է։ Դրանք Utf-8 կոդավորման ձևափոխելու համար կարելի է օգտագործել iconv
ծրագիրը: Հետևյալ հրամանը գտնում է պանակի բոլոր csv ֆայլերը և ամեն մեկի համար ստեղծում է նրա Utf-8 կոդավորմամբ տարբերակը՝ *.txt
ընդլայնմամբ։
find . -name '*.csv' -exec iconv -f ArmSCII-8 -t Utf-8 {} -o {}.txt \;Այս դրությամբ արդեն ունեմ Utf-8 կոդավորմամբ տեքստային ֆայլեր, որոնց ամեն մի տողում գրված է մի ընտրողի մասին ինֆորմացիա։ Ֆայլերի սկզբում մնացել է Excel աղյուսակի սյունակի վերնագրերը, բայց քանի որ ընտրողների տվյալները համարակալված են, մշակելիս ես կդիտարկեմ միայն թվանշանով սկսվող տողերը։
Այս տիպի խնդիրների լուծման համար ամենահարմար գործիքը AWK ծրագրավորման լեզուն է: Իմ համակարգում տեղադրված է այդ լեզվի gawk (GNU Awk) իրականացումը։ Ահա մի կարճ սկրիպտ, որը բոլոր ֆայլերից հարդում է մարդկանց անունները, հաշվում է ամեն մի անունի հանդիպելու քանակը և արտածում է այն անունները, որոնք հանդիպել են միայն մեկ անգամ։
BEGIN { FS = "," } /^[0-9]/ { names[$3]++ } END { uniques = "" for(e in names) if( names[e] == 1 ) uniques = uniques e " " print uniques }Հրամանային տողից այս ծրագիրն աշխատեցնելու համար (այն պահպանել եմ
uniquenames.awk
անունով ֆայլում) պետք է գրել․
gawk -f uniquenames.awk *.txtՈրն անունները տերմինալին կարտածի բացատանիշերով անջատված ու չկարգավորված տեսքով։ Մեկ այլ հրամանով կարելի է անունները կարգավորել ու արտածել մեկ սյունակով (կամ ուղարկել
sorted-names.txt
ֆայլի մեջ)։
gawk -f uniquenames.awk *.txt | tr " " "\n" | sort > sorted-names.txtԵվ վերջում հեռացնեմ բոլոր ժամանակավոր ֆայլերը․
rm *.xls *.csv *.csv.txt
No comments:
Post a Comment