Ich habe 20 tabulatorgetrennte Dateien mit der gleichen Anzahl von Zeilen. Ich möchte jede vierte Spalte jeder Datei auswählen, die in eine neue Datei eingefügt wird . Am Ende hat die neue Datei 20 Spalten, wobei jede Spalte aus 20 verschiedenen Dateien stammt.
Wie kann ich das mit Unix / Linux-Befehlen machen?
Eingabe, 20 desselben Formats, ich möchte die 4. Spalte, die hier als A1 für Datei 1 bezeichnet wird:
chr1 1734966 1735009 A1 0 0 0 0 0 1 0
chr1 2074087 2083457 A1 0 1 0 0 0 0 0
chr1 2788495 2788535 A1 0 0 0 0 0 0 0
chr1 2821745 2822495 A1 0 0 0 0 0 1 0
chr1 2821939 2822679 A1 1 0 0 0 0 0 0
...
Ausgabedatei mit 20 Spalten, jede Spalte stammt aus einer der 4. Spalten der 20 Dateien:
A1 A2 A3 ... A20
A1 A2 A3 ... A20
A1 A2 A3 ... A20
A1 A2 A3 ... A20
A1 A2 A3 ... A20
...
text-processing
columns
paste
Jun Cheng
quelle
quelle
paste <(cut -f 4 1.txt) <(cut -f 4 2.txt) .... <(cut -f 4 20.txt)
. Das funktioniert, weilcut
standardmäßig Kürzungen in durch TAB getrennten Feldern vorgenommen werden. Wenn die Frage erneut geöffnet wird, werde ich dies auch als Antwort veröffentlichen.Antworten:
mit
paste
under bash kannst du machen:Mit einem Python-Skript und einer beliebigen Anzahl von Dateien (
python scriptname.py column_nr file1 file2 ... filen
):quelle
Das folgende Skript führt dies mit awk aus. Ich habe der Einfachheit halber eine Rownummer hinzugefügt, die die Anzahl der Zeilen in Ihren Dateien angibt (r). Die Anzahl der Spalten, die Sie einfügen möchten, wird durch c angegeben.
quelle