Trimmen Sie einen Wert aus einem Awk-Feld

Trimmen Sie einen Wert aus einem Awk-Feld

Ich analysiere eine Datei und verwende awk, um das erste und dritte Feld zu erhalten.

Das ist alles gut, aber im ersten Feld möchte ich die letzten 4 Zeichen aus dieser Zeichenfolge entfernen. Bisher habe ich keine Möglichkeit gefunden, dies in awk zu tun, und die einzige Möglichkeit besteht darin, mehrere Aufrufe zu tätigen, sodass ich die awk-Ausgabe in 2 Variablen speichere und dann die erste Zeichenfolge schneide.

Gibt es eine effizientere Möglichkeit, dies zu tun? So sieht die Datei aus

abcdefghi.234,12345,xyz
riosadsef.543,19432,eis
baifafsag.342,01934,eod

Das ist, was ich in der Schleife ausführe

echo $output | awk -F, "{print $1, $3}"

Dadurch wird die Zeile korrekt gedruckt, aber dann möchte ich $1 kürzen und die letzten 4 Zeichen entfernen

Antwort1

Eine Möglichkeit besteht darin, die Funktion von awk zu verwenden substr. Beginnen wir beispielsweise mit dieser Eingabe:

$ cat input
abcdefghi.234,12345,xyz
riosadsef.543,19432,eis
baifafsag.342,01934,eod

Wir können die Spalten eins und drei drucken und dabei die letzten vier Zeichen der Spalte eins weglassen:

$ awk -F, '{print substr($1, 1, length($1)-4), $3}' input
abcdefghi xyz
riosadsef eis
baifafsag eod

verwandte Informationen