Ich kann ein Feld aus einer Zeile mit dem Befehl "Ausschneiden" auswählen. Zum Beispiel mit folgenden Daten:
a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
Dieser Befehl:
cut -d, -f2 # returns the second field of the input line
Kehrt zurück:
b
g
l
Meine Frage: Wie kann ich die zweite Feld wählen Zählen vom Ende? Im vorherigen Beispiel wäre das Ergebnis:
d
i
n
Antworten:
Kehre die Eingabe vorher und nachher um
cut
mitrev
:Ausgabe:
quelle
cut
keine negativen Feldindizes (wie Python) akzeptiert werden können.Versuchen Sie dies mit awk :
Oder mit Perl :
Oder mit Ruby (danke manatwork):
Oder mit
bash
(danke manatwork):Oder mit Python :
quelle
bash
braucht nicht festgelegt Spaltenanzahl für diese:while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
.perl
mitruby
.ruby
hinzugefügt,bash
bearbeitet.-
oder beginnt (abhängig von der Umgebung, der Shell oder der Art und Weise, in der die Shell kompiliert wurde) und möglicherweise Backslash-Zeichen enthält,echo
ist dies keine Option. Warum müssen Sie vor dem Füttern mit nichtscat
konzen trieren ? Du brauchst statt in und . Negative Indizes funktionieren nur in neueren Versionen von und . In älteren Versionen können Siefile.txt
python
read -A
read -a
ksh93
zsh
zsh
ksh93
bash
${d: -2:1}
${d[@]: -2:1}
in deinem letzten Satz.Sed verwenden:
Ausgabe:
Erläuterung
([^,]*,)*
Entspricht einer beliebigen Anzahl von Nicht-Komma-Zeichen, gefolgt von einem Komma, dh einer beliebigen Anzahl von Spalten.([^,]*)
stimmt mit einer Spalte überein.(,[^,]*){1}
Stimmt mit einer Spalte am Ende überein, wenn Sie den Quantifizierer so ändern{1}
, dass{2}
er mit der zweiten Spalte am Ende übereinstimmt.quelle