Ich habe eine Datei mit folgendem Text:
AAAA
BBBB
CCCC
DDDD
1234
5678
9012
3456
EEEE
7890
etc...
Und ich möchte die alphabetischen Linien mit den numerischen Linien abgleichen, damit sie so aussehen:
AAAA 1234
BBBB 5678
CCCC 9012
DDDD 3456
EEEE 7890
Kennt jemand einen einfachen Weg, um dies zu erreichen?
emacs
.. Suchen Sie nach einerelisp
Lösung oder wie Sie ein Shell-Skript in Emacs ausführen können?Antworten:
Ein Weg mit
perl
:Inhalt von
script.pl
:Inhalt von
infile
:Führen Sie es wie folgt aus:
Und Ergebnis:
quelle
s/\A\s*(.*?)\s*\Z/\1/
.Unter
awk
Beibehaltung leerer Zeilen unter der Annahme, dass die Datei gut formatiert ist, kann jedoch eine Logik hinzugefügt werden, um die Datei zu überprüfen:quelle
oder in einem einzigen Schritt ohne temporäre Dateien
Der letzte
sed
Schritt entfernt das Trennzeichen in den Leerzeilen, das durchpaste
...quelle
Verwenden Sie bei Emacs Rechteckoperationen , um die Textzeilen auszuschneiden und vor den numerischen Zeilen einzufügen.
quelle
Wenn die Einträge in Ordnung sind,
Teilen Sie die Eingabe in alphabetische und numerische Einträge auf, indem Sie Folgendes verwenden
grep
:grep "[[:alpha:]]\+" < file > alpha
grep "[[:digit:]]\+" < file > digit
Verbinden Sie die beiden resultierenden Dateien
alpha
unddigit
verwenden Siepaste
:paste alpha digit
(Sie können hinzufügen,-d " "
damit ein Leerzeichen anstelle einer Registerkarte verwendet wird.)quelle
paste <(grep "[[:alpha:]]\+" file) <(grep "[[:digit:]]\+" file)
oder mit einer einzigen Prozessersetzung :grep "[[:alpha:]]\+" file | paste - <(grep "[[:digit:]]\+" file)
.Schade, dass awk keine netten Push / Pop / Unshift / Shift-Funktionen hat. Hier ist ein kurzer Perl-Ausschnitt
quelle
default
Klausel werden Leerzeilen sofort gedruckt, sodass die Leerzeichen vor "1234" vor der Zeile "AAAA" angezeigt werden.Geben Sie eine Datei mit Text ein, versuchen Sie, die
pr
Substitutionssyntax wie folgt zu verwenden und zu verarbeiten:Sie können die Breite um anpassen
-w9
oder Leerzeichen um entfernensed "s/ //g"
.quelle