Sortieren in einem awk-Skript, wie? [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Sortieren in einem awk-Skript, wie? [gelöst]

Beitrag von Duff » 20.06.2007 11:03:36

Hallo,

habe mal eine Frage zu einem einfachen awk-Skript.

Und zwar sieht mein Skript bisher so aus:

Code: Alles auswählen

#!/usr/bin/awk -f
BEGIN   { FS="_"
        }
/Pattern/ {printf("%20s \t %100s\n", $4, $0)}
Nun möchte ich aber, dass die Ausgabe des Skriptes nach der ersten Spalte (sort -k1) sortiert wird.

Ich möchte dass sort irgendwie in das awk-Skript einbauen, weiß aber leider nicht wie und alle bisherigen Versuche schlugen fehl.

So was möchte ich nicht immer aufrufen müssen (dass sortieren sollte durch das awk-Skript erledigt werden):

Code: Alles auswählen

./skript.awk file | sort -k1
Danke.
Zuletzt geändert von Duff am 21.06.2007 08:26:50, insgesamt 1-mal geändert.
Oh, yeah!

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Beitrag von C_A » 20.06.2007 17:04:10

script:

Code: Alles auswählen

#!/bin/bash
sort -k... $1 |awk -F_ '/Pattern/ {printf("%20s \t %100s\n", $4, $0)}'
Aufruf:

Code: Alles auswählen

./script filename
Bei Sort wirst du dir noch das richtige Feld und den richtigen Separator (-t) aussuchen muessen.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 20.06.2007 19:12:18

Danke für die Antwort, aber dass ist ja dann wieder ein Shell-Skript.

Ich würde dass Ganze gerne, wenn es denn überhaupt möglich ist, mit einem awk-Skript machen.
(Das awk-Skript soll auch noch erweitert werden; war bisher nur ein Anfang)
Oh, yeah!

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Beitrag von C_A » 20.06.2007 19:28:03

Irgend ein bestimmter Grund wieso du sort nicht verwenden willst / wieso es kein bash script sein darf?

Mit awk geht das "manuell" auch dann musst du dir halt in awk ein bubble sort oder so scripten... aber wieso das Rad neu erfinden...

grb
Beiträge: 8
Registriert: 15.06.2007 11:16:27

Beitrag von grb » 20.06.2007 20:08:58

Hi,

vorausgesetzt du verwendest gawk, könntest du einen Umweg gehen:
Verwende sprintf um Strings zu formatieren und pack diese dann in ein Array. Anschließend kannst du die gawk-exklusive Funktion
asort verwenden und deine Strings ausgeben.

mfg

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 20.06.2007 23:40:28

Alternativ kannst du auch awk sort aufrufen lassen:

Code: Alles auswählen

BEGIN   { FS="_"
        }
/Pattern/ {printf("%20s \t %100s\n", $4, $0) | "sort"} 
("sort -k1" ginge natürlich ist, ist aber redundant

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 21.06.2007 08:26:23

Ja super, so funktioniert es. Danke.

Mein Problem war wohl, dass ich die Hochkommas weggelassen hatte.
Fehlermeldung:

Code: Alles auswählen

Fatal: Ausdruck für '|' Umlenkung ist ein leerer String.
Oh, yeah!

Antworten