Kann mir jemand die Option -C von mapfile genauer erklären?

1 Antwort

Ein Callback ist einfach eine Funktion, die automatisch aufgerufen wird, wenn ein bestimmtes Ereignis eintritt – in diesem Fall jedes Mal, wenn "mapfile" eine neue Zeile liest.

Der Callback von mapfile ermöglicht es dir so, für jede Zeile, die eingelesen wird, eine Funktion (der Callback) aufzurufen. Diese Funktion kannst du verwenden, um die Zeilen zu bearbeiten oder eine andere Art der Verarbeitung durchzuführen.

Nehmen wir mal ein kleines Beispiel

callback() {
  echo "${1//,/ }"
}

mapfile -C callback ABC.csv

Was passiert hier?

  • Jede Zeile der CSV-Datei wird eingelesen.
  • Die Callback-Funktion wird aufgerufen und ersetzt die Kommas durch Leerzeichen.
  • Die veränderte Zeile wird ausgegeben

A65HN 
Beitragsersteller
 22.01.2025, 10:02

Perfekt, das hilft mir sogar in mehr als einer Hinsicht weiter:

  1. Die Schreibweise zum Ändern einer Zeile kannte ich noch nicht (bisher habe ich dafür immer sed eingespannt)
  2. Um die Semikola (deutsche locale der csv) loszuwerden, habe ich bisher bei mapfile immer die Option -t verwendet. Aber deine callback-function kann dazu verwendet werden, den newline am Ende jeder Zeile loszuwerden. Das hat mich bei der Ausgabe des letzten array-Index immer ein wenig gestört, und so hattte ich die csv-Datei ein wenig modifiziert: sed -i 's/$/;/' csv-Datei

Danke für den Tipp. 👍