Ausgabe an einen String

S

Standard

Hallo Leute,

ich bin noch eher Anfänger mit dem Skripten und habe diesbezüglich ein Problem.

Folgendes habe ich ausgeführt:

Code:
[root@test tmp]# cat input
A:2:3:4:5:6
B:2:3:4:5:6
C:2:3:4:5:6
D:2:3:4:5:6
[root@test tmp]# hostname >> test; cut -d: -f1,5 input |sed -n 1p >> test
[root@test tmp]# cat test
test
A:5
[root@test tmp]#

Ich möchte jedoch als Ausgabe in der Datei folgendes haben:

test;A:5

wie kann ich den Inhalt immer an den String hängen und ein ";" dazwischen erzeugen?

Viele Grüße
Standard
 
Hilft Dir der
Code:
--output-delimiter=STRING
zu cut weiter?
 
Hej,

Mit ">>" haengst du den Output an eine Datei an, was du in diesem Fall aber scheinbar eigentlich nicht willst (damit kriegst du jedenfalls nicht dein gewuenschtes Ergebnis).

Eine ganz einfache Moeglichkeit ist die einzelnen Teile vom Ergebnis in Variablen zwischen zu speichern, und dann erst am Ende so in die Datei zu schreiben wie du's haben willst:
Code:
host=$(hostname)
columns=$( cut -d: -f1,5 input | sed -n 1p )

echo "$host;$columns" >> test

@tgruene: Ich vermute du hast ungenau gelesen, ich sehe jedenfalls nicht was deine Antwort mit der Loesung zu tun hat. ;)

MfG,
bytepool
 
Hi,

nur als Ergänzung - die Ausgabe mehrerer Kommandos wie beschrieben zu einer Zeile zusammenzufassen, geht ggf. auch mit ()-Klammern und paste, also z.B.
Code:
(
hostname
cut -d: -f1,5 input | sed -n 1p
) |
paste -s -d ';' - >test
Ansonsten würde ich die cut/sed-Pipe noch umdrehen, um das Kommando, das die meisten Daten wegwirft, vorne stehen zu haben, und dem sed auch noch mitteilen, dass er aufhören kann, wenn er die gesuchte Zeile ausgegeben hat, also
Code:
sed -ne '1{p;q;}' input | cut -d: -f1,5
Das spielt bei einer Test-Input-Datei mit 4 Zeilen wohl keine grosse Rolle, wenn es aber in der Realität irgendwann um 40000000 Zeilen geht, dann hat cut so viel weniger Stress ... :)

Grüsse, A.
 
Um die Fülle der Möglichkeiten nochmals zu erweitern:
Code:
[neumannr@thinkpad ~]$ echo -n "`hostname`;" >> test; cut --output-delimiter=":" -d: -f1,5 input | head -n 1 >> test
[neumannr@thinkpad ~]$ cat test
thinkpad;A:5
oder zusammengefasst:
Code:
[neumannr@thinkpad ~]$ echo "`hostname`;`cut --output-delimiter=":" -d: -f1,5 input | head -n 1`" >> test
[neumannr@thinkpad ~]$ cat test
thinkpad;A:5
und falls du das zeilenweise für das input file machen willst:
Code:
while read LINE; do echo "`hostname`;$LINE" | cut --output-delimiter=":" -d: -f1,5; done < input
 
Zuletzt bearbeitet von einem Moderator:
Bisschen übersichtlicher mit awk:

Code:
h=`hostname`; awk -F: '{print ENVIRON["h"]";"$1":"$5}' < input
 

Ähnliche Themen

E/A-Fehler (.snapshots is not a btrfs subvolume).

Verschlüsseltes Backup-Script mit rsync

Keine grafische Oberfläche (Debian Installation)

Verständnisfrage zu RegExps

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Zurück
Oben