Frage von MegaSimonz, 56

Linux: Ubuntu. Paste funktioniert nicht mit Pipe?

Ich habe 2 Dateien, nennen wir sie mal A und B. In beiden befinden sich Namen und Zahlen, die mit einem Tabulator Zeichen getrennt sind. Nun ist meine Aufgabe (Schule) die 2. Spalte von der Datei B an die Datei A zu hängen, mithilfe von Pipes. Ausgabe erfolgt in eine extra Datei C.

Ich habe es so versucht:

paste A | cut -f2 B > C

Jedoch wird nur die zweite Spalte von B kopiert. Warum? Ich finde nichts im Internet und bin am verzweifeln :(

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Linuxhase, 11

Hallo

Linux: Ubuntu. Paste funktioniert nicht mit Pipe?

Es hat nichts mit Ubuntu zu tun, es ist einfach Shell-Wissen!

Ich habe 2 Dateien, nennen wir sie mal A und B. In beiden befinden sich
Namen und Zahlen, die mit einem Tabulator Zeichen getrennt sind. Nun ist
meine Aufgabe (Schule) die 2. Spalte von der Datei B an die Datei A zu
hängen, mithilfe von Pipes. Ausgabe erfolgt in eine extra Datei C.

Ich hab da mal ein Script vorbereitet um die Vorgänge zu verdeutlichen:

#!/bin/bash
# Ich habe 2 Dateien, nennen wir sie mal A und B.
# In beiden befinden sich Namen und Zahlen, die mit einem Tabulator Zeichen getrennt sind.
#
# Nun ist meine Aufgabe (Schule) die 2. Spalte von der Datei B an die Datei A zu hängen, mithilfe von Pipes.
# Ausgabe erfolgt in eine extra Datei C.
#
# Ich habe es so versucht:
#
# paste A | cut -f2 B > C
#
# Jedoch wird nur die zweite Spalte von B kopiert. Warum? Ich finde nichts im Internet und bin am verzweifeln :(

echo "Spalte_1a Spalte_2a Spalte_3a" >> a # Datei a wird erzeugt
echo "Spalte_1aa Spalte_2aa Spalte_3aa" >> a # Datei a wird erweitert
echo "Spalte_1b Spalte_2b Spalte_3b" >> b # Datei b wird erzeugt
echo "Spalte_1bb Spalte_2b Spalte_3bb" >> b # Datei b wird erweitert

echo "Vorher" # Anzeige beider Dateien START
cat a
echo "---------------------------------------------------" # Trennlinie
cat b
echo "---------------------------------------------------" # Anzeige beider Dateien ENDE
awk '{print $2}' b >> a # Extraktion der 2. Spalte von b
# und umleiten resp anhängen der Ausgabe in a
echo "Nachher"
cat a # Anzeige Inhalt a
cat a b | tee c # Ausgabe des Inhalts von a, b und einfügen in c
echo "---------------------------------------------------" # Trennlinie
cat c # Ausgabe von c (= a & b)

Und das:

paste A | cut -f2 B > C

In der Manpage zu paste steht:

paste - merge lines of files

Es werden Zeilen von Dateien zusammengefügt, die Syntax ist dann so:

paste a b
Inhalt von a Inhalt von b

Damit wird der Inhalt von b in der gleichen Zeile ausgegeben statt untereinander wie das mit cat getan wird:

cat a b
Inhalt von a
Inhalt von b

cut -f2 b > c

Gibt die der Datei 2. Spalte der Datei b aus bzw. leitet die Ausgabe in c um.

Möchte man eine Ausgabe und gleichzeitig eine Umleitung in eine Datei, dann ist tee das richtige Programm.

Linuxhase

Antwort
von androhecker, 34

Ich habe das nicht getestet, denn man kann direkt in Bash nur schwierig sowas zusammenfügen.

paste A > C && cut -f2 B >> C

Edit: Das könnte auch gehen:

cut -f2 B | paste A > C
Kommentar von MegaSimonz ,

Erstmal danke für deine Antwort.

Der erste Befehl ist denke ich nicht erlaubt, da wir mit | arbeiten müssen.

Beim zweiten wird nur der Inhalt der Datei A kopiert bzw. ausgegeben. Ich verstehs einfach nicht ... :(

Kommentar von androhecker ,

Was noch gehen könnte:

paste A (cut -f2 B) > C

Das gilt wahrscheinlich auch als Cheat, du könntest auch mal auf StackOverflow fragen, da bekommst du auf jeden Fall eine Lösung mit Pipe, ich kann das Zeug gerade nur nicht testen, weil ich an meinem Windoof PC bin.

Antwort
von AnonYmus19941, 37

Pipe leitet die Ausgabe des einen Programms (paste) in die Eingabe des anderen (cut) um. Cut erwartet allerdings nur eine Eingabe, und die hast du mit "B" geliefert. Wenn du "B" weglässt, sollte es auf "A" angewandt werden.

Mir fällt im Moment kein Befehl ein, der die beiden vereint. Du kannst aber natürlich immer zwei Befehle mit "&&" aneinanderhängen. Ich weiß allerdings nicht, ob das noch der Aufgabe entspricht ...

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten