別のファイルに列を追加する方法

別のファイルに列を追加する方法

これは私のファイルで、名前は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]+"  ")

関連情報