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

AWK. ավելացրեք տեքստ ելքային ֆայլի մեջտեղում

Ես լիովին նոր եմ AWK-ում և փորձում եմ ստորակետերով առանձնացված ֆայլից ստեղծել C ոճի զանգված: Ահա EE.hex մուտքագրված ֆայլը: Երկարությունը (վեցանկյուն թվերի թիվը, եթե այս ֆայլը կարող է տարբեր լինել).

0x01 , 0x00 , 0x05 , 0x00 , 0x08 , 0x1C , 0x00 , 0x58 ,
0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 ,
0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 , 0x03 ,
0x03 , 0x03 , 0x01 , 0x00 , 0x23 , 0x00 , 0x08 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x01 , 0x00 , 0x5B , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 ,



Սա AWK սցենարն է, որի վրա ես աշխատել եմ (EE.sh):

#!/bin/bash

EEPROM_FILE="$1"  # First parameter - DSP parameter file

awk '

BEGIN {
printf("const uint8_t DSP_eeprom[] =\n{\n")

array_size=0
}



{
  # Format hex EEPROM array properly
  if ($1 ~ "0x.") 
    {print "  " $1 $2, $3 $4, $5 $6, $7 $8 "\n  " $9 $10, $11 $12, $13 $14, $15 $16}

  # Count how many bytes there is in the array were creating
    for(i=1; i < NF; i++) {
      if ($i ~ "0x.") {
        array_size++
      } 
    }

}


END {

printf("};\n")

{print "//I want the calculated array size "array_size" to be inserted between the [] brackets, not at the end like this!"}

}' "$EEPROM_FILE" > EE.h




Ելքային ֆայլը (EE.h) ունի հետևյալ տեսքը.

const uint8_t DSP_eeprom[] =
{
  0x01, 0x00, 0x05, 0x00,
  0x08, 0x1C, 0x00, 0x58,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x01, 0x00,
  0x23, 0x00, 0x08, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x5B, 0x00,
  0x00, 0x00, 0x00, 0x80,

};
//I want the calculated array size 72 to be inserted between the [] brackets



Ինչպես արդեն տեսնում եք մեկնաբանությունում, ինձ անհրաժեշտ է, որ վեցանկյուն թվերը տեղադրվեն քառակուսի փակագծերի միջև, ոչ թե վերջում։ Կա՞ որևէ կերպ, որ կարող եմ

  • Ա) Տեղադրե՞լ թիվը քառակուսի փակագծերի միջև:

  • Բ) Տեղադրե՞լ նախապես ձևաչափված տող տողի վրա { նիշից առաջ:



ցանկալի արդյունքը ունի հետևյալ տեսքը` քառակուսի փակագծերի միջև տեղադրված հաշվարկված երկարությամբ.

const uint8_t DSP_eeprom[72] =
{
  0x01, 0x00, 0x05, 0x00,
  0x08, 0x1C, 0x00, 0x58,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x01, 0x00,
  0x23, 0x00, 0x08, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x5B, 0x00,
  0x00, 0x00, 0x00, 0x80,
};

Շնորհակալություն

19.03.2018

  • Խնդրում ենք, ձեր հարցին ավելացրեք ձեր ցանկալի արդյունքը այդ նմուշի մուտքագրման համար: 19.03.2018
  • Շնորհակալություն Ես խմբագրել եմ հիմնական թեման. 19.03.2018

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


1

եթե ունեք gawk, կարող եք պարզապես մի քիչ

$ awk -F' *, *' -v RS='^$' -v OFS=', ' '
      {print "const uint8_t DSP_eeprom[" NF-1 "] =\n{";
       for(i=1;i<NF;i++) printf "%s", $i OFS ((i+4)%8?"":ORS)}
  END {print "\n};" }' file

const uint8_t DSP_eeprom[72] =
{
0x01, 0x00, 0x05, 0x00,
0x08, 0x1C, 0x00, 0x58,
0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x01, 0x00,
0x23, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x5B, 0x00,
0x00, 0x00, 0x00, 0x80,
};
19.03.2018
  • Շնորհակալություն ձեր պատասխանի համար: Քանի որ ես նորեկ եմ, ես նախընտրում եմ սցենարը գրելու իմ սեփական ձևը: Ուրեմն այլ ճանապարհ չկա՞, քան FS, RS և OFS փոփոխությունները: Ես նաև օգտագործում եմ այս սկրիպտը՝ մեկ ֆայլից մի քանի C մակրո հանելու համար, այնուհետև ստեղծելու DSP_eeprom զանգվածը No ֆայլից: 2 - EE.hex ֆայլը: Ես գրել եմ վերևի օրինակը՝ խնդիրը հնարավորինս մեկուսացնելու համար: Միգուցե ավելի հեշտ է, եթե ես վերբեռնեմ ամբողջական սկրիպտը, գումարած նաև մյուս մուտքային ֆայլը: Ես նոր եմ Stackoverflow-ում, ուստի նախկինում երբեք չեմ արել դա: Պե՞տք է խմբագրեմ իմ հիմնական գրառումը, թե՞ կարող եմ օգտագործել «Պատասխանել ձեր հարցին» կոճակը: 20.03.2018
  • Նոր նյութեր

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

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

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

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

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

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

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


    © 2024 amcode.ru, AMcoder - javascript, python, java, html, php, sql