Ich möchte nur die dritte Datenspalte aus dem Terminal einfügen.
Ich habe ursprünglich so etwas wie:
4 SF0086 SF0086
12 SF0087 SF0087
17 TSF141 TSF141
29 TSF070 TSF070
30 TSF028 TSF028
31 TSF122 TSF122
Wenn ich das kopiere und in das Terminal einfüge, wird es zu einer einzigen Zeile
4 SF0086 SF0086 12 SF0087 SF0087 17 TSF141 TSF141 29 TSF070 TSF070 30 TSF028 TSF028 31 TSF122 TSF122
Ich hätte es gern so:
SF0086
SF0087
TSF141
TSF070
TSF028
TSF122
Ich kann die Option für eine Zeile (Mitte) an dieser Stelle als Datei speichern und dann etwas wie oder verwenden. awk
Oder sed
alles perl
, was im gängigen POSIX-System verfügbar ist, ist eine Option, aber ich habe das noch nicht herausgefunden. Ich hatte auch kein Glück mit dem paste
Befehl und komme zu dem Schluss, paste
dass er das für mich nicht tun kann. Die Daten ändern sich (was bedeutet, dass sich der Abstand ändert), jedes Mal, wenn ich die dritte Spalte extrahieren muss. Gibt es da draußen irgendwelche Datenextraktions-/Formatierungs-Meister?
Antwort1
„cut“ ist der Befehl, den Sie suchen. Sie geben an, welches Trennzeichen verwendet werden soll (Leerzeichen sind meines Wissens die Standardeinstellung) und welche Spalte Sie möchten. Auf der Manpage finden Sie alle Einzelheiten.
Damit es richtig funktioniert, müssen Sie sicherstellen, dass es mit intakten Zeilenumbrüchen eingefügt wird.
Antwort2
cut
Was für mich am besten funktioniert hat, erwies sich jedoch nicht als gültige Option, da ich immer Duplikate haben werde und die Nummerierung (-f Felder) sich immer ändern wird, und da meine Liste Hunderte von Feldern lang sein kann .
Das hier ist das Ergebnis, das ich wollte:
sed -e 's/\s\+/\n/g' data.txt > data_cr.txt && sort data_cr.txt | uniq -d > final.txt
Wo:
sed -e 's/\s\+/\n/g' data.txt > data_cr.txt
zwingt den gesamten Text, getrennt durch Leerzeichen, in eine eigene Zeile und schreibt ihn in eine neue Datei data_cr.txt...und
sort data_cr.txt | uniq -d > final.txt
nimmt die Daten zeilenweise und druckt von allen Duplikaten nur eine einzige Kopie.