Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
neuling
- Beiträge: 159
- Registriert: 21.07.2007 22:27:56
Beitrag
von neuling » 14.12.2011 11:37:10
Hallo,
kann ich mit printf oder einem anderen Shell-Befehl an z. B. jeder 5. Stelle einer Zeile einen Zeilenumbruch einfügen?
Leider muss das ganze unter AIX passieren, sodass ich nur die zum Teil eingeschränkten AIX-Befehle zur Verfügung habe.
Aus
Soll
werden.
-
Cae
- Beiträge: 6349
- Registriert: 17.07.2011 23:36:39
- Wohnort: 2130706433
Beitrag
von Cae » 14.12.2011 16:57:18
Mit dd?
Code: Alles auswählen
$ ls
$ dd if=/dev/urandom | base64 | head >data
$ file data
data: ASCII text
$ i=0; while [ $i -lt 1000 ] ; do dd if=data bs=5 count=1 skip=$i 2>/dev/null >>split; let i=5+$i; echo >>split; done
$ head split
SuaJK
Y8H+n
PbBaQ
K
Qw0
rLg+X
ke8cH
pTe
L
aIqrR
$ ls
data split
$
Das ist zwar etwas unflexibel, insbesondere wenn non-ASCII in's Spiel kommt, sieht blöd aus wegen den schon vorhandenen Zeilenunbrüchen und ist unflexibel, weil die Schleife willkürlich gestoppt wird. Aber es funktioniert mit eher simplen Mitteln.
Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
Meillo
- Moderator
- Beiträge: 9241
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 15.12.2011 10:00:54
Use ed once in a while!
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 15.12.2011 10:07:30
Meillo hat geschrieben:
fold -w5
Genial wie einfach.
Bei Umlauten aber ein etwas unsicheres Verhalten:
Code: Alles auswählen
$ echo öäü | fold -w2
ö
ä
ü
$ echo öeärüt | fold -w2
ö
e�
�r
ü
t
$ echo a1öe2är3üt4 | fold -w2
a1
ö
e2
ä
r3
ü
t4
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
neuling
- Beiträge: 159
- Registriert: 21.07.2007 22:27:56
Beitrag
von neuling » 15.12.2011 10:56:40
Danke für diesen einfachen Befehl. Mit Umlauten gibt's bei mir kein Problem.
-
Meillo
- Moderator
- Beiträge: 9241
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 15.12.2011 11:21:03
rendegast hat geschrieben:
Bei Umlauten aber ein etwas unsicheres Verhalten:
Soweit ich das verstehe, sollte dieses Verhalten nur mit `-b' auftreten. Ohne `-b' sollte fold Spalten statt Bytes zaehlen und erkennen, dass `ö' ein Zeichen (bei UTF-8 in zwei Bytes kodiert) ist und nur eine Position einnimmt.
Bei mir ist ist das Verhalten aber ebenso wie bei dir.
Neuling wird vermutlich ein Legacy-Encoding verwenden (z.B. ISO-8859), bei dem die Umlaute auch nur ein, wenn auch 8-bit, Byte verwenden.
Use ed once in a while!
-
Cae
- Beiträge: 6349
- Registriert: 17.07.2011 23:36:39
- Wohnort: 2130706433
Beitrag
von Cae » 15.12.2011 11:28:35
vs.
Cae hat geschrieben:Code: Alles auswählen
$ i=0; while [ $i -lt 1000 ] ; do dd if=data bs=5 count=1 skip=$i 2>/dev/null >>split; let i=5+$i; echo >>split; done
Warum einfach, wenn's auch kompliziert geht… die fold-Variante sieht aber irgendwie schlanker aus, danke
Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier