Nejste přihlášen/a.
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
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 }
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ý
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.