Reduzieren eines Streams aus mehreren Zeilen zu einer Zeile


7

Ich habe eine Datei mit einer großen Anzahl von Zeilen, von denen jede eine Reihe von Zahlen enthält, die durch Leerzeichen getrennt sind. Ich verarbeite diese Daten auf irgendeine Weise in einer Pipe und möchte dann die mehreren Zeilen zu einer einzigen Zeile aller durch Leerzeichen getrennten Zahlen zusammenfassen.

Gibt es ein Standard-Befehlszeilenprogramm, mit dem ich dies tun kann? Es scheint, als würden die meisten zeilenweisen Dienstprogramme nicht mit den Zeilenumbrüchen herumspielen ...

Antworten:


13

Aus diesem Grund verwenden Sie hierfür keine zeilenweisen Dienstprogramme.

$ tr '\n' ' ' < input.txt > output.txt

3

Selbst zeilenweise Dienstprogramme können alle Zeilenumbrüche entfernen.

sed:

sed ':a;N;$!ba;s/\n/ /g' file

awk:

awk '{printf $0" "}' file

Aber es ist viel besser zu benutzen tr, wie @Ignacio Vazquez-Abrams schrieb.


Ich wusste, dass es mit sed gemacht werden kann, aber du hast recht, tr ist besser. Noch ein Unix-Dienstprogramm mit zwei Buchstaben, das ich meinem Gürtel hinzufügen kann.
JeremyKun

1

leiten Sie den Ausgang an xargs

#!/bin/sh -x
while
do
date > temp
ping cp1za >> temp
cat temp | xargs echo
done
Tue Dec 17 18:23:31 UTC 2013 CS V1R12: Pinging host CP1ZA.TMMNA.TMM.TOYOTA.C (150.45.12.22) Ping #1 response took 0.001 seconds.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.