Zeichen an Position X einfügen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
neuling
Beiträge: 159
Registriert: 21.07.2007 22:27:56

Zeichen an Position X einfügen

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

Code: Alles auswählen

12345ABCDEFGHIJ
KLMNO67890PQRST
Soll

Code: Alles auswählen

12345
ABCDE
FGHIJ
KLMNO
67890
PQRST
werden.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Zeichen an Position X einfügen

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

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Zeichen an Position X einfügen

Beitrag von Meillo » 15.12.2011 10:00:54

Code: Alles auswählen

fold -w5
Use ed once in a while!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Zeichen an Position X einfügen

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

Re: Zeichen an Position X einfügen

Beitrag von neuling » 15.12.2011 10:56:40

Meillo hat geschrieben:

Code: Alles auswählen

fold -w5
Danke für diesen einfachen Befehl. Mit Umlauten gibt's bei mir kein Problem.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Zeichen an Position X einfügen

Beitrag von Meillo » 15.12.2011 11:21:03

rendegast hat geschrieben: Bei Umlauten aber ein etwas unsicheres Verhalten:

Code: Alles auswählen

$ echo a1öe2är3üt4 | fold -w2
a1
ö
e2
ä
r3
ü
t4
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

Re: Zeichen an Position X einfügen

Beitrag von Cae » 15.12.2011 11:28:35

Meillo hat geschrieben:

Code: Alles auswählen

fold -w5
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 :mrgreen:

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

Antworten