Como adicionar uma coluna ao outro arquivo

2

suponha que este seja meu arquivo cujo nome é myFile1

1 10
2 20
3 30
4 40
5 50
6 60

sei que quero adicionar minhas outras colunas a isso. Esta coluna está no arquivo myFile2.

10
11
12
13
14
15
16

Existe alguma maneira de adicionar myFile2 para myFile1 para criar esta tabela:

1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
    
por Mohammad Reza Rezwani 25.07.2014 / 10:28

2 respostas

2

paste é bastante útil aqui, mas você será punido se o número de valores for desigual:

$ paste -d' ' myFile{1,2}
1 10 10
2 20 11
3 30 12
4 40 13
5 50 14
6 60 15
 16

Se você quiser limitar arbitrariamente as linhas usadas no segundo arquivo para o primeiro, você pode, ele vai ser um pouco mais lento e usar mais RAM (não que isso importe em um conjunto de dados tão pequeno).

$ 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
    
por Oli 25.07.2014 / 10:33
1

Não foi possível resistir a adicionar a opção detalhada (script 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
>>> 

Para gravar imediatamente as alterações no arquivo1, o código seria:

#!/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")

No caso de haver também a possibilidade de que o arquivo2 tenha menos linhas que o arquivo1, o código abaixo cuidará da adição correta da coluna e da possível adição de mais colunas:

#!/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]+"  ")
    
por Jacob Vlijm 25.07.2014 / 11:42