2016-07-22 15 views
0

Ich habe eine Datei mit den folgenden DatenKann ich im Shell-Skript mehr als ein Ausgabebegrenzungszeichen im Schnitt angeben?

ABCDEFGHIJKLMNOPQRST

Ich brauche einen Ausgabebefehl mit cut wie folgt

bcd | klm.no | pq.rst

Ich muss beide Trennzeicheneinschließen 0 und . in meiner Ausgabe mit Schnitt.

ich die Ausgabe mit einem Begrenzer mit diesem Code

cat file.txt |cut -c2-4,11-13,14-15,16-17,18-20 --output-delimiter='|' 

als

bcd haben | klm | no | pq | rst

Kann ich 2 -Ausstoß Delimiter durch etwas im Befehl ändern?

+1

Kannst du es nicht zweimal durchschneiden? Einmal für den ersten Separator und wieder für den zweiten? – gilez

+0

@gilez Ja, du könntest. – tripleee

Antwort

2

unterstützt einen einzelnen Begrenzer zu einem Zeitpunkt, aber Sie können dies leicht durch einen einfachen sed oder Awk-Skript ersetzen.

awk '{ print substr($0, 2, 4) "|" substr($0, 11, 13) "." 
    substr($0, 14, 15) "|" substr($0, 16, 17) "." 
    substr($0,18, 20) }' file.txt 

Einstimmend die cat is useless.

1

Mit GNU sed:

$ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/\1|\2.\3|\4./' file.txt 
bcd|klm.no|pq.rst 
1

Zwei cut s (vorgeschlagen von Gilez ‚s Kommentar zu OP):

cut -c2-4,11-15,16-20 --output-delimiter='|' file.txt | \ 
cut -c1-7,8-13,14-15 --output-delimiter='.' 

Ausgang:

bcd|klm.no|pqr.st 

Giv en solche regelmäßigen Eingang, tr kann auch als „Antwort“ dies ohne Rohr:

tr -s 'a-t' 'b-d|k-m.no|p-r.st' < file.txt 

Hinweis: tr nicht einfügen können, so dass es unmöglich klingt. Im Allgemeinen ist ist unmöglich, aber die Cheat ist die Antwort in SET2 zu enthalten, und den Rest auspressen.