Ich versuche, das erste und das letzte Zeichen jeder Zeile in einer Textdatei zu entfernen und die resultierende abgeschnittene Version in einer neuen Datei zu speichern. Hat jemand eine Idee, wie man das effizient mit awk
oder anderen Linux-Programmen / Befehlen speziell für große Dateien macht?
input.txt
(s,2,4,5,6)
"s,1,5,5,2"
{z,0,4,5,3}
[y,2,4,5,5]
(y,4,4,5,7)
(r,20,4,5,7)
(e,9,4,5,2)
Erwartete output.txt
s,2,4,5,6
s,1,5,5,2
z,0,4,5,3
y,2,4,5,5
y,4,4,5,79
r,20,4,5,7
e,9,4,5,2
text-processing
sed
awk
Pacodelumberg
quelle
quelle
ssed
oder die Heirloom-Werkzeugkistesed
kann eine bessere Leistung erzielen.sed
Löschen Sie gemäß Ihrer Frage das letzte und das erste Wort aus der Eingabedatei wie folgt:
quelle
s/.\(.*\).$/\1/
. Es könnte schneller sein, weil keine Rückreferenzen verwendet werden, und in der Frage wurden "große Dateien" erwähnt.time yes | head -n 10000000 | COMMAND >/dev/null
. Ich bekommerev input | cut -c2- | rev | cut -c2-
→ 0,14s,sed 's,.\(.*\).$,\1,'
→ 3,38s;awk '{print substr($0,2,length()-2);}'
→ 3,50 s;sed 's/.$//; s/^.//'
→ 5.09s.sed 's/.\(.*\)./\1/'
scheint schneller zu sein alssed 's/^.\(.*\).$/\1/'
(GNU sed wieder). Außerdem hängt die Leistung vom Gebietsschema (Interpretation des Charakters) und dersed
Implementierung ab (in dieser Hinsicht ist sed aus der Erbstück-Toolchest erheblich schneller als GNU sed).Wie immer gibt es viele Möglichkeiten
Erläuterung
,
- Das sed-Trennzeichen kann auch ein beliebiges anderes Zeichen sein, sofern es nicht benötigt wird, wo immer es benötigt wird..
Ordnen Sie ein einzelnes Zeichen zu\(.*\)
- Gruppieren Sie den verbleibenden Teil, und dieser wird gespeichert, um weiter abgerufen zu werden..
Ordnen Sie erneut ein einzelnes Zeichen zu$
- Ende der Linie\1
- Geben Sie den Text aus, der der obigen Gruppe entsprichtg
global auf der Linie ersetzen.quelle
g
? Es wird nur eine Übereinstimmung pro Zeile geben.Sie können es auch tun,
awk
wenn Sie es vorziehenquelle
Dies sollte auch funktionieren. Es "übersetzt" gut jedes der Zeichen in nichts (löschen).
Der Nachteil ist, dass sie gelöscht werden, wenn sie nicht auch das erste / letzte Zeichen sind. Es werden auch alle Endzeichen fehlen, die Sie nicht in der Liste auflisten
()[...
.quelle