524 Stimmen

Wie man das letzte Feld mit 'cut' findet

Ohne Verwendung von sed oder awk, nur cut, wie bekomme ich das letzte Feld, wenn die Anzahl der Felder unbekannt oder bei jeder Zeile variiert?

1voto

Steve Ward Punkte 99

choose -1

choose unterstützt negative Indizierung (die Syntax ist ähnlich wie bei den Slices in Python).

0voto

aperson1961 Punkte 9

Wenn Sie eine Datei namens filelist.txt haben, die eine Liste von Pfaden wie folgt enthält: c:/dir1/dir2/file1.h c:/dir1/dir2/dir3/file2.h

dann können Sie folgendes tun: rev filelist.txt | cut -d"/" -f1 | rev

0voto

Kaffe Myers Punkte 444

Für den Spaß an der Sache füge ich hier einen Ansatz zu dieser alten Frage hinzu:

$ cat input.file # Datei mit Eingaben, die verarbeitet werden müssen
a;b;c;d;e
1;2;3;4;5
hier kein Trennzeichen
124;adsf;15454
foo;bar;ist;null;info

$ cat tmp.sh # Präsentation des Skripts, um den Job zu erledigen
#!/bin/bash
delim=';'
while read -r line; do  
    while [[ "$line" =~ "$delim" ]]; do
        line=$(cut -d"$delim" -f 2- <<<"$line")
    done
    echo "$line"
done < input.file

$ ./tmp.sh # Ausgabe des obigen Skripts / verarbeitete Eingabedatei
e
5
hier kein Trennzeichen
15454
info

Außer bash wird nur cut verwendet. Nun ja, und echo, nehme ich an.

-2voto

AnneTheAgile Punkte 9350

Ich habe festgestellt, dass es funktioniert, wenn wir einfach sicherstellen, dass ein abschließender Begrenzer vorhanden ist. In meinem Fall habe ich Begrenzer in Form von Kommas und Leerzeichen. Ich füge am Ende ein Leerzeichen hinzu;

$ ans="a, b"
$ ans+=" "; echo ${ans} | tr ',' ' ' | tr -s ' ' | cut -d' ' -f2
b

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X