Ersetzen von Text mit Datei-Inhalt

A

AlexK

Hy,

ich komme mit meinem Skript nicht mehr weiter ... egal wie ich versuche auf die Lösung zu kommen passt immer irgendetwas nicht.

Mein Skript soll in einem Verzeichnis alle Dateien mit der Dateiendung *.stderr sowie deren Inhalt im JSON-Format ausgeben. Ansich klappt das schon nur ich bekomme den Inhalt der Dateien nicht in die Ausgabe.

Da dieses Skript auf einem Router läuft, hab ich nicht jede art von Skriptsprachen wie perl, ruby usw. zur Verfügung.

Hab aber unter anderem folgende Programme drauf: echo,sed,awk,head,tail,wc,cat,grep,printf,tr kann man also sagen die Standard-Programme für solche zwecke.

Mit diesem Code:
Code:
#!/bin/sh
find *.stderr | awk '
BEGIN {
	FS=" "
	string=","
	i=0
}
{
	if($0 == "") {
		continue
	}
	i+=1
	line[i] = "{\n"
	line[i] = line[i]"\t\t\"name\":\""$0"\",\n"
	line[i] = line[i]"\t\t\"content\":\"\"\n"
	line[i] = line[i]"\t}"

}
END {
	print "{"
	print "\"files\":["
	for(n=1;n<=i;n++) {
		if(n==i) { string = "" }
		print "\t"line[n]string
	}
	print "]"
	print "}"
}'

kriege ich folgende Ausgabe:
Code:
{
"files":[
	{
		"name":"KNOPPIX_V5.1.1CD-2007-01-04-DE.iso.stderr",
		"content":""
	},
	{
		"name":"allwaysync-7-1-2.exe.stderr",
		"content":""
	}
]
}

Kennt jemand einen Weg noch den Datei-Inhalt dieser *.stderr Dateien mit reinzubringen? Also in das "content"-Feld? Da awk keine externen Befehle wie cat unterstützt stehe ich irgendwie auf dem Schlauch und weis nicht weiter.

Habe zwar von Javascript Ahnung nur nich viel in Linuxscripten.
 
also ich weiß nicht, ob awk sowas wie 'ne fopen() funktion oder so hat. aber was spricht denn eigentlich dagegen einfach cat zu verwenden?

entweder das oder du übergibts die datei an awk per kommandozeilenargument.

und google told me, dass man damit sogar mehrere dateien nacheinander öffnen kann.
http://www.clug.de/vortraege/awk/ schrieb:
ARGV
Array der Befehlszeilenparameter. Die Indizes laufen von 0 bis ARGC-1. Durch ändern von ARGV kann man vom Script aus weitere Dateien öffnen.
also erst die dateinamen reinpipen und dann nacheinander "abarbeiten" im skript durch manipulation des ARGV arrays.. also so hab ich das jetzt mal verstanden. klingt aber ehrlich gesagt n bissl umständlich...

und das von dir gepostete skript: wozu brauchst du denn bitte da awk? das kannst du ganz einfach auch direkt in der shell machen (mit ganz vielen echos ...) und dann halt awk verwenden, um die dateien selber zu verarbeiten...

und btw: du bist nicht zufällig verwandt mit der person, die diesen thread hier eröffnet hat?
awk in Verbindung mit Shell
(nur so aus interesse...)
 

Ähnliche Themen

sed in awk

Zeilen behalten, die Werte in einem bestimmten Bereich enthalten

Shell Skript beschleunigen

Summe von Zahlen in einer Zeilen bilden

Wie komme ich an den Inhalt des Inhalts einer Variable?

Zurück
Oben