2 verschiedene Schnittausgaben in einem einzigen Befehl kombinieren?


15

Ich habe eine Datei wie die folgende:

1234
ABCD
EFGH

Ich würde es gerne in folgendes konvertieren:

2341
BCDA
FGHE

Die eigentliche Datei enthält 4.000 Wörter, daher möchte ich dies auf effiziente Weise tun. Ich habe versucht, den Befehl zu verwenden cut -c 2-4,1 file.txt, aber er erzeugt genau die gleiche Ausgabe wie die Eingabe. Ich dachte, ich könnte 3 verschiedene Befehle verwenden:

cut -c 1 file.txt > temp1.txt
cut -c 2-4 file.txt > temp2.txt
// combine the two with paste or pr

... aber ich würde einen einzelnen Befehl vorziehen, da ich ihn mit geringfügigen Änderungen mehrmals ausführen muss, sodass das Ausführen eines Befehls weniger fehleranfällig ist als das Ausführen von 3 Befehlen jedes Mal.

Gibt es eine Möglichkeit, die beiden cut-Anweisungen zu einer zu kombinieren? Etwas wie:

cut -c 1 file.txt | pr (cut -c 2-4 file.txt)

Oder gibt es einen besseren Weg, dies zu tun?

Antworten:


8

Verwenden von sed:

sed 's:^\(.\)\(.*\):\2\1:' file.txt

2341
BCDA
FGHE

11

Mit cutund können pasteSie auch einen Einzeiler machen:

$ cat file
1234
ABCD
EFGH
$ paste --delimiter=''  <(cut file -c2-4) <(cut file -c1)
2341
BCDA
FGHE

+1 für die Einfügeverknüpfung. Es ist leicht verständlich. :)
Ankit

Sie können auch einfach -d ''statt , --delimiters=''um Zeichen aus LISTE Wiederverwendung anstelle von Tabulatoren
rubo77


3
$ cat test
1234
ABCD
EFGH
$ awk -F "" '{print $2$3$4$1}' test
2341
BCDA
FGHE

Sie können das Trennzeichen über "-F" nach Ihren Angaben ändern und die Reihenfolge der Felder beliebig gestalten.


1

Hier ist ein Weg mit perl:

perl -F'' -lane 'print @F[1..@F], $F[0]'

An den Buchstabengrenzen automatisch teilen, eine nach links drehen und drucken.


0

Ich habe eine Alternative in einem Skript gefunden:

~$ cut -c2- file.txt>file2.txt
~$ cut -c1 file.txt>file3.txt
~$ paste -d "" file2.txt file3.txt>file4.txt
~$ rm file2.txt file3.txt

Das Skript schneidet die Ketten in separate Dateien. Fügen Sie dann eine neue Datei (file4.txt) hinzu und entfernen Sie schließlich die Ersatzdateien.

die llua-lösung ist für meinen geschmack sauberer.


-1

Haben Sie versucht, rev?

~$ cat filename | rev


3
Schauen Sie sich die Beispielausgabe an. Es ist keine reine Umkehrung, sondern gutes Denken. Wenn Sie keine Möglichkeit finden, dies zu überarbeiten, sollten Sie es wahrscheinlich löschen, damit es nicht herabgestuft wird und den Thread verwirrt.
SLM
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.