it-swarm.com.de

Wie schneide (wähle) ich ein Feld aus der Textzeilenzählung ab dem Ende aus?

Ich weiß, wie man mit dem Befehl cut ein Feld aus einer Zeile auswählt. Zum Beispiel bei 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 das zweite Feld Zählen am Ende auswählen? Im vorherigen Beispiel wäre das Ergebnis:

d
i
n
37
ssn

Kehren Sie die Eingabe vor und nach cut mit rev um:

<infile rev | cut -d, -f2 | rev

Ausgabe:

d
i
n
54
Thor

Versuchen Sie dies mit awk :

awk -F, '{print $(NF-1)}' file.txt

Oder mit Perl :

Perl -F, -lane 'print $F[-2]' file.txt

Oder mit Ruby (danke Manatwork):

Ruby -F, -lane 'print $F[-2]' file.txt

Oder mit bash (danke manatwork):

while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt

Oder mit Python :

cat file.txt |
python -c $'import sys\nfor line in sys.stdin:\tprint(line.split(",")[-2])'
13
Gilles Quenot

Mit sed:

sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile

Ausgabe:

d
i
n

Erläuterung

  • ([^,]*,)* entspricht einer beliebigen Anzahl von Nicht-Komma-Zeichen, gefolgt von einem Komma, d. h. einer beliebigen Anzahl von Spalten.
  • ([^,]*) stimmt mit einer Spalte überein.
  • (,[^,]*){1} stimmt mit einer Spalte am Ende überein, wenn Sie den Quantifizierer ändern {1} bis {2} es stimmt mit der zweiten Spalte vom Ende usw. überein.
0
Thor