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?
Antworten
Zu viele Anzeigen?
Steve Ward
Punkte
99
choose -1
choose unterstützt negative Indizierung (die Syntax ist ähnlich wie bei den Slices in Python).
aperson1961
Punkte
9
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.
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
- See previous answers
- Weitere Antworten anzeigen