
これは私のファイルで、名前はmyFile1です。
1 10
2 20
3 30
4 40
5 50
6 60
これに別の列を追加したいのですが、この列は myFile2 というファイルにあります。
10
11
12
13
14
15
16
このテーブルを作成するために、myFile2 を myFile1 に追加する方法はありますか?
1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
答え1
paste
ここではかなり便利ですが、値の数が等しくない場合は罰せられます:
$ paste -d' ' myFile{1,2}
1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
16
2 番目のファイルで使用する行を 1 番目のファイルに限定したい場合は、それが可能です。ただし、少し遅くなり、より多くの RAM が使用されます (ただし、このような小さなデータ セットでは問題にはなりません)。
$ 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
答え2
verbose オプションを追加せずにはいられませんでした (Python スクリプト)
#!/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
>>>
変更を file1 にすぐに書き込む場合、コードは次のようになります。
#!/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")
ファイル2に少ないfile1 よりも行数が多い場合は、以下のコードで列を正しく追加し、さらに列を追加することもできます。
#!/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]+" ")