Gegebene Eingabe des Formulars
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar foolkasjfdrte
Wie kann ich nur die zweite Spalte abschneiden? Das Trennzeichen ist TAB und die zweite Spalte darf höchstens 75 Zeichen lang sein.
text-processing
sed
awk
LoukiosValentine79
quelle
quelle
awk 'BEGIN{OFS=FS="\t"} {$2=substr($2,1,75)}1' file
Antworten:
Wenn Sie nur die ersten 75 Zeichen der zweiten Spalte drucken möchten (einschließlich Leerzeichen und nur zwei Spalten in der Datei), haben Sie folgende Möglichkeiten:
Oder mit GNU
sed
:Oder:
Alternativ können Sie festlegen
fold
, dass die ersten 91 Zeichen (das sind 8 für die Kennung und weitere 8 für die Registerkarte) ausgeschnitten und nur die erste Zeile gedruckt werden sollen:Wenn Ihre Datei mehr als 2 Spalten haben kann und Sie nur die zweite abschneiden möchten, können Sie dies tun (was, wie ich gerade bemerkt habe, nur eine Umformulierung von Stephens Antwort ist ):
Oder (beachten Sie, dass dies unterbrochen wird, wenn die ersten 75 Zeichen der 2. Spalte als regulärer Ausdruck interpretiert werden können):
quelle
sed
Befehl verwendet auch einen GNUism (\t
).\t
ist ein GNUismus? Ernsthaft? Was ist dann die tragbare Art, eine Registerkarte zu beschreiben?\n
(und auch hier nicht[...]
mit vielen Implementierungen), keine auf der RHS.perl
macht wenig Sinn. Denken Sie zum Beispiel an eine Eingabe wieaba\t.*
Teilen Sie
awk
die Datei mit Tabulatoren und geben Sie das erste Feld vollständig und die ersten 75 Zeichen (höchstens) des zweiten aus:Wie von fedorqui hervorgehoben , können Sie Dateien mit mehr als zwei Feldern verarbeiten, indem Sie die Felder ersetzen, die Sie abschneiden müssen:
Sie können das
substr
auf mehrere Felder anwenden , indem Sie sie bei Bedarf durchlaufen.quelle
;
notwendig?/pattern/ {action} {exception-handling}
). Nun, das wäre äußerst unwahrscheinlich, da;
es ziemlich üblich ist , diese wegzulassen .Tragbar / POSIXly mit
sed
:Oder um jede Spalte abzuschneiden:
quelle
Wenn es nur 2 Spalten gibt:
{0,75}
bedeutet, wählen Sie zwischen 0 und 75 Zeichen..*
ist der entfernte Abschnitt jenseits von char 75.Wenn es 2 oder mehr Spalten gibt:
[^\t]*
ist der entfernte Abschnitt jenseits von char 75.quelle
sed
undPOSIXLY_CORRECT
nicht in der Umgebung ist.