
Angenommen, dies ist meine Datei mit dem Namen myFile1
1 10
2 20
3 30
4 40
5 50
6 60
weiß, dass ich dem weitere Spalten hinzufügen möchte. Diese Spalte befindet sich in der Datei myFile2.
10
11
12
13
14
15
16
. gibt es eine Möglichkeit, myFile2 zu myFile1 hinzuzufügen, um diese Tabelle zu erstellen:
1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
Antwort1
paste
ist hier ziemlich praktisch, wird Sie aber bestrafen, wenn die Anzahl der Werte ungleich ist:
$ paste -d' ' myFile{1,2}
1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
16
Wenn Sie die in der zweiten Datei verwendeten Zeilen beliebig auf die erste beschränken möchten, können Sie dies tun. Es wird dann jedoch etwas langsamer sein und mehr RAM verbrauchen (was bei einem so kleinen Datensatz jedoch keine Rolle spielt).
$ paste -d' ' myFile1 <(head -n$(cat myFile1 | wc -l) myFile2)
1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
Antwort2
Konnte nicht widerstehen, die ausführliche Option hinzuzufügen (Python-Skript)
#!/usr/bin/env python3
with open("file1") as l:
l = [item.replace("\n", "") for item in l]
with open("file2") as l2:
l2 = [item.replace("\n", "") for item in l2]
for item in [l[i]+" "+l2[i] for i in range(0, len(l))]:
print(item)
>>>
1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
>>>
Um die Änderungen sofort in Datei1 zu schreiben, wäre der Code:
#!/usr/bin/env python3
with open("file1", "r") as l:
l = [item.replace("\n", "") for item in l]
with open("file2", "r") as l2:
l2 = [item.replace("\n", "") for item in l2]
with open("file1", "wt") as edit:
for item in [l[i]+" "+l2[i] for i in range(0, len(l))]:
edit.write(item+"\n")
Falls es auch eine Möglichkeit gibt, dass Datei2wenigerZeilen als Datei1, der folgende Code sorgt für das korrekte Hinzufügen der Spalte und das mögliche Hinzufügen weiterer Spalten:
#!/usr/bin/env python3
with open("file1", "r") as l1:
l1 = [item.replace("\n", "") for item in l1]
with open("file2", "r") as l2:
l2 = [item.replace("\n", "") for item in l2]
for i in range(0, len(l1)):
try:
print(l1[i]+" "+l2[i])
except IndexError:
print(l1[i]+" ")