Angenommen, ich habe die folgende Zeichenfolge:
something1: +12.0 (some unnecessary trailing data (this must go))
something2: +15.5 (some more unnecessary trailing data)
something4: +9.0 (some other unnecessary data)
something1: +13.5 (blah blah blah)
Wie mache ich das einfach?
+12.0,+15.5,+9.0,+13.5
in Bash?
listOfStuff mkString ", "
oder Haskellintercalate ", " listOfString
Antworten:
Sie können verwenden
awk
undsed
:Oder wenn Sie eine Pfeife verwenden möchten:
Um es aufzuschlüsseln:
awk
eignet sich hervorragend für den Umgang mit Daten, die in Felder unterteilt sind-vORS=,
setzt das "Ausgabedatensatztrennzeichen" auf,
das, was Sie wollten{ print $2 }
weistawk
an, das zweite Feld für jeden Datensatz (Zeile) zu druckenfile.txt
ist Ihr Dateinamesed
,
Entfernt einfach das Trailing und verwandelt es in eine neue Zeile (wenn Sie keine neue Zeile möchten, können Sie dies tuns/,$//
)quelle
awk -v ORS=| '{ print $1 }' DCMC.rtf | sed 's/,$/\n/'
{print $1}
sonst bekomme ich nur Kommas in der AusgabeSauber und einfach:
quelle
cat thing | awk -F',' '{ print "'\''" $7 "'\' '" }' | paste -s -d ','
,'
als Trennzeichen verwenden?dos2unix
) zu behandeln, wenn die Zeichenfolge CRLFs enthält.quelle
quelle
function | awk...
in Ihrem Beispiel?awk ein Liner
quelle
Das sollte auch funktionieren
quelle
Dies könnte für Sie funktionieren:
oder
oder
Für jede Zeile in der Datei; Das erste Feld und die folgenden Leerzeichen abschneiden, den Rest der Zeile nach dem zweiten Feld abschneiden und an das Haltefeld anhängen. Löschen Sie alle Zeilen außer der letzten, in der wir in den Haltebereich wechseln, und konvertieren Sie nach dem Löschen der eingeführten neuen Zeile zu Beginn alle Zeilen in
,
's.NB Könnte geschrieben werden:
quelle
Sie können verwenden
grep
:Dabei wird die Zeichenfolge beginnend mit einer
+
beliebigen Zeichenfolge gefunden\S\+
und anschließend neue Zeilenzeichen in Kommas konvertiert. Dies sollte für große Dateien ziemlich schnell gehen.quelle
Versuchen Sie diesen einfachen Code:
quelle
Versuche dies:
Das Gute ist der einfache Teil des Löschens von Zeilenumbrüchen "\ n"!
BEARBEITEN: Eine weitere großartige Möglichkeit, Zeilen mit sed zu einer einzigen Zeile zusammenzufügen, ist folgende:
|sed ':a;N;$!ba;s/\n/ /g'
Von hier aus .quelle
Eine Lösung in reinem Bash:
Ergebnis: + 12,0, + 15,5, + 9,0, + 13,5
quelle
Ich habe diese einfache Lösung mit awk nicht gesehen
quelle
Mit Perl:
quelle
Sie können dies auch mit zwei sed-Anrufen tun:
Der erste sed-Aufruf entfernt uninteressante Daten und der zweite verbindet alle Zeilen.
quelle
Sie können auch folgendermaßen drucken:
Nur awk: mit printf
quelle
Eine weitere Perl-Lösung, ähnlich wie Dan Fegos awk:
-a
Weist Perl an, die Eingabezeile in das @ F-Array aufzuteilen, das ab 0 indiziert wird.quelle
Nun, der schwierigste Teil ist wahrscheinlich die Auswahl der zweiten "Spalte", da ich keine einfache Möglichkeit kennen würde, mehrere Leerzeichen als ein Leerzeichen zu behandeln. Für den Rest ist es einfach. Verwenden Sie Bash-Substitutionen.
quelle