AMcoder - javascript, python, java, html, php, sql

Ուզու՞մ եմ գնալ ֆայլ և վերցնել արժեքներ՝ հիմնված իմ ֆայլում առկա ֆայլի անվան և բանալի բառի վրա:

Ես նոր եմ shell scripting-ում, այնպես որ ես ձեր ամբողջ օգնության կարիքն ունեմ իմ նպատակին հասնելու համար: Ես ունեմ input.csv անունով ֆայլ, որը բաղկացած է ստորև ներկայացված տվյալներից,

G22822 277 OR2
G22822 329 OR9
G22940 286 OR3
G22940 412 OR7
G25365 289 OR3

Այժմ, OR2, OR9, OR3, OR7 և OR3-ը նույնպես տարբեր ֆայլեր են, որոնց անունները al_or2.cap, al_or9.cap, al_or3.cap, al_or7.cap և al_or3.cap են՝ տարբեր ճանապարհով: Այս գլխարկային ֆայլերում առկա տվյալները հետևյալն են.

al_or2.cap:

277 ASCII GRP 184578924
102 ASCII GRP 754815923

al_or9.cap:

981 ASCII GRP 542189353
329 ASCII GRP 158203981

Բոլոր գլխարկային ֆայլերում առկա իմաստուն տվյալների նման:

Եթե ​​տեսնում եք input.csv (G22822 277 OR2) առաջին տողը, ինչպես նշված է, ես պետք է գնամ al_or2.cap և որոնեմ 277 հիմնաբառը և տպեք G22822 և 542189353 (G22822 առկա է input.csv և 542189353-ում) կամ ներկա պահին: .

Այնուհետև այս G22822 329 OR9-ի համար ես պետք է գնամ al_or9.cap և տպեմ G22822 և 158203981:

Իմ պահանջվող ելքը, օրինակ՝

G22822 184578924
G22822 158203981 and so on..

Խնդրում եմ օգնեք ինձ հասնել իմ նպատակին:

23.11.2018

  • G22822 277 OR2.csv չէ (ստորակետերով բաժանված-արժեքներ): Դու նկատի ունեիր բացատ-առանձնացված արժեքներ (թե՞ ստորակետերը հանեցիր) Իսկ այն, ինչ դու կոչում ես csv, միշտ ունի՞ 3-դաշտ: 23.11.2018
  • Իսկ եթե բանալի բառը չկա երկրորդ ֆայլում: 23.11.2018
  • Այո, դրանք տարածությունից անջատված արժեքներ են և միշտ ունեն 3 դաշտ: @david 23.11.2018
  • Եթե ​​հիմնաբառը ներկա չէ, ապա ես չեմ ուզում այն ​​տպել @ shawn 23.11.2018

Պատասխանները:


1

Ենթադրելով, որ ձեր ներկայացրած տվյալները ճշգրիտ են, և չգիտեք ձեր գրացուցակի կառուցվածքը, ահա մի փոքր բան

#!/bin/bash
while read a b c
do
  awk -v a=$a -v b=$b  'b==$1{printf "%s %s\n", a, $4}' tmp/al_$(echo $c | tr '[A-Z]' '[a-z]').cap
done < input.csv

Պահպանելով դա որպես karthik.sh, պահպանելով ձեր input.csv-ի առաջին երկու տողերը, ստեղծելով tmp ենթացուցակ al_or2.cap և al_or9.cap ֆայլերով, և գործարկելով ./karthik.sh-ը, ես ստանում եմ հետևյալ ելքը.

./karthik.sh 
G22822 184578924
G22822 158203981
23.11.2018
  • Եթե ​​նա չի աշխատում bash-ով (քանի որ հարցը նշված է "shell", ապա խնդիրներ կլինեն ${c,,}-ի հետ, որը բաշիզմ է: (ավելի լավ է օգտագործել tr, քանի դեռ հաստատ իմանաք) 23.11.2018
  • Արդար մեկնաբանություն, համապատասխանաբար փոփոխելով գրառումը; շնորհակալություն :) 23.11.2018
  • Իհարկե, ինձ դա բռնել է ավելի քան մեկ անգամ :) 23.11.2018
  • Ժող, ևս մեկ հարց, եթե ես նույնպես պետք է տպեմ 277 և OR2: այսինքն, (G22822 184578924 277 OR2) 26.11.2018
  • Դա մի փոքր երկարացնում է awk հայտարարությունը: awk -v a=$a -v b=$b -vc=$c 'b==$1{printf "%s %s %s %s\n", a, $4, b, c}' tmp/al_$(echo $c | tr '[A-Z]' '[a-z]').cap 26.11.2018

  • 2

    Եթե ​​ձեր սկզբնական ֆայլն ունի 3 դաշտ, իսկ ձեր տվյալների ֆայլերը (օրինակ՝ al_or2.cap և այլն) բոլորն ունեն 4 դաշտ, դուք կարող եք օգտագործել մեկ զանգ դեպի awk և ներկառուցված tolower, sprintf, getline և split ֆունկցիաները՝ ֆայլի անունը ձևավորելու համար: կարդացեք համապատասխան ֆայլը և ստացեք արդյունքները ձեր ուզած հերթականությամբ հետևյալ կերպ.

    awk '
    {   lwr = tolower($3)
        str = sprintf ("al_%s.cap", lwr)
        while (getline line < str > 0) {
            split (line, a, " ", seps)
            if (a[1] == $2)
                print $1,a[4]
        }
    }' file
    

    Ներկայացված ֆայլեր

    $ cat file
    G22822 277 OR2
    G22822 329 OR9
    G22940 286 OR3
    G22940 412 OR7
    G25365 289 OR3
    
    $ cat al_or2.cap
    277 ASCII GRP 184578924
    102 ASCII GRP 754815923
    
    $ cat al_or9.cap
    981 ASCII GRP 542189353
    329 ASCII GRP 158203981
    

    Օրինակ Օգտագործում/Ելք

    $ awk '
    > {   lwr = tolower($3)
    >     str = sprintf ("al_%s.cap", lwr)
    >     while (getline line < str > 0) {
    >         split (line, a, " ", seps)
    >         if (a[1] == $2)
    >             print $1,a[4]
    >     }
    > }' file
    G22822 184578924
    G22822 158203981
    

    Պարզ awk սցենարի ստեղծում

    Եթե ​​ցանկանում եք վերը նշվածից ստեղծել awk-script, կարող եք անել հետևյալը.

    #!/usr/bin/awk -f
    {
        lwr = tolower($3)
        str = sprintf ("al_%s.cap", lwr)
        while (getline line < str > 0) {
            split (line, a, " ", seps)
            if (a[1] == $2)
                print $1,a[4]
        }
    }
    

    Այժմ ձեզ հարկավոր է միայն պահպանել ֆայլը և դարձնել այն գործարկելի (օրինակ՝ chmod +x myscript.awk, այնուհետև

    Օրինակ Օգտագործում/Ելք

    $ ./myscript.awk file
    G22822 184578924
    G22822 158203981
    
    23.11.2018
    Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..