ForumHilfe ich verstehe das AWK Programm nicht
Alex Krug – Donnerstag, 09. Februar 2017 10:04 Uhr

Hallo Liebe Linux Community,

im zuge meiner Arbeit bin ich auf dieses AWK Programm gekommen. Leider sind meine Kenntnisse diesbezüglich sehr gering. Vielleicht kann mir hier jemand erklären was es das programm genau macht ? Was AWK an sich tut ist mir bekannt :)
Programm:
if test -s $1
then awk -F# ‘ # -F = Trennzeichen “#”
{
if (prev1==””)
{ s19=0
s24=0
x = sprintf(“%s”,$7)
x1= sprintf(“%s”,$35)
x2= sprintf(“%s”,$36)
x3= sprintf(“%s”,$13)
x4= sprintf(“%s”,$33)
x5= sprintf(“%s”,$11)
prev1 =$1 ; prev2 =$2 ; prev3 =$3 ; prev4 =$4 ; prev5 =$5
prev6 =$6 ; prev7 =$7 ; prev8 =$8 ; prev9 =$9 ; prev10=$10
prev11=$11 ; prev12=$12 ; prev13=$13 ; prev14=$14 ; prev15=$15
prev16=$16 ; prev17=$17 ; prev18=$18 ; prev19=$19 ; prev20=$20
prev21=$21 ; prev22=$22 ; prev23=$23 ; prev24=$24 ; prev25=$25
prev26=$26 ; prev27=$27 ; prev28=$28 ; prev29=$29 ; prev30=$30
prev31=$31 ; prev32=$32 ; prev33=$33 ; prev34=$34 ; prev35=$35
prev36=$36 ; prev37=$37 ; prev38=$38 ; prev39=$39 ; prev40=$40
prev41=$41 ; prev42=$42 ; prev43=$43 ; prev44=$44 ; prev45=$45
prev46=$46 ; prev47=$47 ; prev48=$48
}
if ($1!=prev1 || $2!=prev2 || $3!=prev3 || $16!=prev16 || $4!=prev4 || $39!=prev39 || $9!=prev9 || $31!=prev31 || $12!=prev12 || $5!=prev5 || $40!=prev40 || $41!=prev41 )
{ printf “%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%.2f#%.2f#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#\n”,prev1,prev2,prev3,prev4,prev5,prev6,x,prev8,prev9,prev10,x5,prev12,x3,prev14,prev15,prev16,prev17,prev18,s19,prev20,prev21,prev22,prev23,s24,prev25,prev26,prev27,prev28,prev29,prev30,prev31,prev32,x4,prev34,x1,x2,prev37,prev38,prev39,prev40,prev41,prev42,prev43,prev44,prev45,prev46,prev47,prev48
prev1 =$1 ; prev2 =$2 ; prev3 =$3 ; prev4 =$4 ; prev5 =$5
prev6 =$6 ; prev7 =$7 ; prev8 =$8 ; prev9 =$9 ; prev10=$10
prev11=$11 ; prev12=$12 ; prev13=$13 ; prev14=$14 ; prev15=$15
prev16=$16 ; prev17=$17 ; prev18=$18 ; prev19=$19 ; prev20=$20
prev21=$21 ; prev22=$22 ; prev23=$23 ; prev24=$24 ; prev25=$25
prev26=$26 ; prev27=$27 ; prev28=$28 ; prev29=$29 ; prev30=$30
prev31=$31 ; prev32=$32 ; prev33=$33 ; prev34=$34 ; prev35=$35
prev36=$36 ; prev37=$37 ; prev38=$38 ; prev39=$39 ; prev40=$40
prev41=$41 ; prev42=$42 ; prev43=$43 ; prev44=$44 ; prev45=$45
prev46=$46 ; prev47=$47 ; prev48=$48
s19=0
s24=0
x = sprintf(“%s”,$7)
x1= sprintf(“%s”,$35)
x2= sprintf(“%s”,$36)
x3= sprintf(“%s”,$13)
x4= sprintf(“%s”,$33)
x5= sprintf(“%s”,$11)
}
s19+=$19
s24+=$24
if ($7 != prev7)
{
x = sprintf(“%s%s”,x,$7)
x1= sprintf(“%s%s”,x1,$35)
x4= sprintf(“%s%s”,x4,$33)
x5= sprintf(“%s%s”,x5,$11)
prev7=$7
}
if ($13 != prev13)
{
x3= sprintf(“%s%s”,x3,$13)
prev13=$13
}
if ($36 != prev36)
{
x2= sprintf(“%s%s”,x2,$36)
prev36=$36
}
}
END { printf “%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%.2f#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#%.2f#%.2f#%s#%s#%s#%s#%s#%s#%s#%s#%s#%s#\n”,prev1,prev2,prev3,prev4,prev5,prev6,x,prev8,prev9,prev10,x5,prev12,x3,prev14,prev15,prev16,prev17,prev18,s19,prev20,prev21,prev22,prev23,s24,prev25,prev26,prev27,prev28,prev29,prev30,prev31,prev32,x4,prev34,x1,x2,prev37,prev38,prev39,prev40,prev41,prev42,prev43,prev44,prev45,prev46,prev47,prev48
} ‘ $1
fi

Ich würde mich über jetweilige Hilfe freuen !

Gruß
Alex

1 Antwort
hha4491 – Dienstag, 14. Februar 2017 15:19 Uhr

Hallo Alex,
awk ist ein Programm zur Mustererkennun/Textbearbeitung. Vor dem, was Du geschickt hast, müßten noch Lesebefehle wie cat, read stehen. Sonst könnte man $1 usw., nicht auswerten.
awk -F# legt + als Feldtrenner fest.
Es wäre nicht schlecht, eiune Beispiueldatei zu haben.

hha4491 – Dienstag, 14. Februar 2017 16:28 Uhr

Ich meinte #,nicht +