Hier ist, wie ich es tun würde.
Zuerst habe ich die IFS-Umgebungsvariable gesetzt, um read
zu sagen, dass "," das Feldtrennzeichen ist.
export IFS=","
die Datei „Eingang“ Angesichts der Daten enthält, die Sie zur Verfügung gestellt, kann ich den folgenden Code verwenden:
cat test | while read a b c d; do echo "$a:$b:$c:$d"; done
schnell rekapitulieren, was oben vor sich geht. cat test |
liest die Datei und leitet sie an while
. while
führt den Code zwischen do
und done
, während read
True zurückgibt. read
liest eine Zeile aus der Standardeingabe und trennt sie in Variablen ("a", "b", "c" und "d") entsprechend dem Wert von $ IFS. Schließlich zeigt echo
nur die Variablen an, die wir gelesen haben.
die mir die folgende Ausgabe
X1:X2:X3:X4
Y1:Y2:Y3:Y4
BTW gibt, die BASH manual ist immer gut zu lesen. Du wirst jedes Mal etwas Neues lernen, wenn du es liest.
Die gute Nachricht: zwei Programme, [awk] (http://www.vectorsite.net/tsawk.html) und [sed] (http://www.grymoire.com/Unix/Sed.html), existieren, genau das zu tun. Die schlechte Nachricht: Sie sind unmöglich zu lernen. Ich stelle das nicht als Antwort dar, weil es das wirklich nicht ist; hoffentlich wird jemand unter Ihnen die korrekte awk/sed Syntax veröffentlichen, die Sie in Ihrem spezifischen Problem verwenden können. – eykanal
'sed' kann schwierig zu lernen sein, aber' awk' ist nicht. Awk ist eigentlich ziemlich einfach. Obwohl Sie dies nicht unbedingt tun müssen, wie dies bei Shell-Einbauten der Fall ist (siehe Ignacios Antwort unten). –