formatieren mit awk

B

BrynFury

Grünschnabel
hey zusammen, ich wieder..;)
möchte mit awk verschiedene strings formatieren

Code:
awk '{printf("%s\t \t%s \t%s \t%s \t%s \n"), $NAME, $PERSONR, "24", $EINTRITTSDAT, $JAHRESGEHALT}' >> result.txt

kann man das so stehen lassen, ohne die angabe einer datei!?!
wie könnte ich das problem lösen?
 
Wo bekommst du denn die Eingabe her?
Hinter einer Pipe geht das schon.

Gruß Wolfgang
 
die eingabe hab ich vorher aus einer tabelle zusammengestellt, ebenfalls mit awk...
aber dürfte ja im grunde genommen egal sein oder?!
 
Und wie kommt die Tabelle in awk?
Nein, ist nicht egal.
awk bekommt seine Daten von einer pipe oder einem File.
 
also auf die daten komme ich wie folgt:
Code:
NAME=$(awk '{print $2}' /home/personal.txt | grep ^$nachname)
also wenn ich die strings mit "echo" ausgebe, dann haben sie den richtigen inhalt...aber wenn ich sie formatieren will, wie oben genannt, dann macht er einfach nicht weiter...
 
Also, die Variablen sind bereits eingerichtet? Dann geht es (auch) so:
Code:
echo $NAME, $PERSONR, "24", $EINTRITTSDAT, $JAHRESGEHALT | \
  awk '{printf("%s\t \t%s \t%s \t%s \t%s \n", $1, $2, $3, $4, $5)}' -
oder so
Code:
printf "%s\t \t%s \t%s \t%s \t%s \n" $NAME $PERSONR "24" \
  $EINTRITTSDAT $JAHRESGEHALT
Allerdings gibt es Probleme, wenn eine Variable ein Leerzeichen enthält. Das wäre eine mögliche Lösung für solche Fälle:
Code:
SEPARATOR='@' #Dieses Zeichen sollte sonst nicht vorkommen

echo $NAME $SEPARATOR $PERSONR $SEPARATOR "24" $SEPARATOR $EINTRITTSDAT \
    $SEPARATOR $JAHRESGEHALT | awk -F$SEPARATOR '{printf( \
    "%s\t \t%s \t%s \t%s \t%s \n", $1, $2, $3, $4, $5)}'
Oder die für die C-Shell
Code:
set SEPARATOR='@'

echo $NAME $SEPARATOR $PERSONR $SEPARATOR "24" $SEPARATOR $EINTRITTSDAT \
    $SEPARATOR $JAHRESGEHALT | awk -F$SEPARATOR '{printf("%s\t \t%s \t%s \t%s \t%s \n", $1, $2, $3, $4, $5)}'
 
Zuletzt bearbeitet:
Ich kenne ja das umhüllende (wrapper) Skript nicht.
Aber warum erledigst du das nicht einfach bei der Eingabe von /home/personal.txt.
Da brauchst du nichtmal den zusätzlichen Prozess von grep.
awk kennt selbst Pattern Matching.
Du kannst auch Shellvariablen an awk übergeben.
Option -v
Code:
awk -v n=$Name 'n == $2 {....}' inputfile
 

Ähnliche Themen

Script pausieren bis Bedingung erfüllt ist

Hilfe für ein shell script

leerzeichen vor und nach einem STRING löschen

[gelöst] - for file in ... nur für bestimmte Endungen?

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Zurück
Oben