Nejste přihlášen/a.

Přihlásit se do poradny

 

Awk - napojení příkazů

Od: elisa24® odpovědí: 9 změna:

Dobrý den, mám do v awku 3 příkazy:

-F[/.] {for(i=1;i<=NF;i++){if($i=="Hello"){print "#"$(i+1)}}}

BEGIN{flag=""} /end/{flag=1;next} !/end/ && /[a-zA-Z]+/{flag=""} flag{print $2}

BEGIN { CONVFMT="%0.17f"}
function t(n, s) {
s=index(n,".")
return (s? substr(n,1,s+4) : n)
}
/end/ || x==1 { if(x==1) print t($1-2400000),t(-2.5*log($2)/log(10)) ; x=1 }

Jak je spojit dohromady prosím?

Input:

gfkjl
dfjldfg
Hello/word
klji
c end
2.456924717385000084e+06 8.305102180161216529e+04 1.356000000000000050e+01
2.456924717654999811e+06 8.287982785722288827e+04 1.383000000000000007e+01

Požadovaný výstup:
#word
56924.7173 -12.2983
56924.7176 -12.2961

Zkoušela jsem něco takového:
BEGIN { CONVFMT="%0.17f"}
-F[/.] {for(i=1;i<=NF;i++){if($i=="Hello"){print "#"$(i+1)}}}
function t(n, s) {
s=index(n,".")
return (s? substr(n,1,s+4) : n)
}
/end/ || x==1 {flag=""} /end/{flag=1;next} !/end/ && /[a-zA-Z]+/{flag=""} flag{ if(x==1) print t($1-2400000),t(-2.5*log($2)/log(10)) ; x=1 }

ale nefunguje to.

Moc děkuju


doplněno 05.02.19 09:33:

Chtěla bych na první řádek výstupního souboru napsat

-F[/.] {for(i=1;i<=NF;i++){if($i=="Hello"){print "#"$(i+1)}}}

Pak se přesunout na řádku pod slovem end

BEGIN{flag=""} /end/{flag=1;next} !/end/ && /[a-zA-Z]+/{flag=""} flag{print z dalšího}

a tam udělat

BEGIN { CONVFMT="%0.17f"}
function t(n, s) {
s=index(n,".")
return (s? substr(n,1,s+4) : n)
}
/end/ || x==1 { if(x==1) print t($1-2400000),t(-2.5*log($2)/log(10)) ; x=1 }

 

 

9 odpovědí na otázku
Řazeno dle hodnocení

 

 

pi*

2x

Bohužel jsem vůbec nepochopil které příkazy. Zkuste to velmi zjednodušit.


Pardon, stejně se to od rána trochu změnilo.


Teď jsem na něco možná přišla.


Znovu:

Input:

gfkjl
dfjldfg

Hello
/Hello/world
klji
c end ----
2.456924717385000084e+06 8.305102180161216529e+04 1.356000000000000050e+01
2.456924717654999811e+06 8.287982785722288827e+04 1.383000000000000007e+01

Požadovaný output

#world

56924.7173 -12.něco

56924.7176 -12.něco

Takže bych potřebovala:

1) najít slovo Hello/ a vypsat to za tím, aby před tím bylo #

2) vymezit oblast sloupců s čísly - to pod řádkem c end ----

3) z toho aritmeticky upravit $1 a $2

Mám:

1.awk

//Hello//{n=split($0,a,"/"); print "#"a[n]} f{print $1,$2} / end /{f=1}

řeší 1) a 2)

2.awk

BEGIN { CONVFMT="%0.17f" }
function t(n, s) {
s=index(n,".")
return (s? substr(n,1,s+4) : n)
}
/end/ || x==1 { if(x==1) print t($1-2400000),t(-2.5*log($2)/log(10)) ; x=1 }

řeší 3)

Takže bych to potřebovala propojit tyto dva programy, což jsem zkoušela

awk -f 1.awk pokus | awk -f 2.awk> output

ale output je prázdný


leteckaposta.cz/...

Závorky jsou špatně, taky jsou ty programy 1.awk, 2.awk a pokus je input. Děkuji


Problém je v tom, že ve výstupu 1.awk je na prvním řádku #... Jak se to prosím napíše, aby se to provádělo až od druhého?

pi*
05.02.19 23:20

next;


Děkuji a kam prosím?


 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]