Acrescentar um arquivo ao segundo até o final do arquivo

0

Eu tenho dois arquivos. O primeiro é apenas um único número. Este número é calculado e muda sempre. O segundo arquivo tem um monte de colunas, e eu não sei o número de linhas (que podem mudar). Por exemplo, eu tenho algo assim:

Arquivo 1:

12

Arquivo 2:

1 2 3 
4 5 6
7 8 9

Eu quero

1 2 3 12
4 5 6 12
7 8 9 12

Meus pensamentos são de que você poderia fazer um while not EOF , em seguida, cat File 1 e File 2 . Como posso fazer isso?

    
por Dani 25.08.2015 / 10:25

5 respostas

4

Outro awk :

$ awk 'BEGIN{getline l <"file1"};{print $0, l}' file2
1 2 3 12
4 5 6 12
7 8 9 12
  • BEGIN block foi executado primeiro antes de ler o arquivo de entrada. A primeira linha em file1 foi recuperada usando a função getline() , armazenada na variável l
  • A cada linha de file2 , imprimimos o conteúdo $0 junto com l , separados por OFS , que é um espaço por padrão.
por 25.08.2015 / 10:34
2

Usando o awk

$ awk -v n=$(cat file1) '{print $0,n}' file2
1 2 3 12
4 5 6 12
7 8 9 12

Em csh / tcsh , tente:

awk -v n='cat file1' '{print $0,n}' file2

Como funciona

  • -v n=$(cat file1)

    Isso atribui o conteúdo de file1 à variável awk n .

  • print $0,n

    Isto imprime cada linha seguido por n .

Usando sed

$ sed '1{h;d}; G;s/\n/ /' file1 file2
1 2 3 12
4 5 6 12
7 8 9 12

Como funciona

  • 1{h;d}

    A primeira leitura de linha é salva no espaço de espera e, em seguida, excluída desse espaço de padrão (para que não seja impressa).

  • G; s/\n/ /

    Para todas as linhas subsequentes, usamos o comando get, G . Isso acrescenta ao espaço de padrões uma nova linha e o espaço de espera. Em seguida, substituímos essa nova linha por um espaço.

por 25.08.2015 / 10:31
0

Isso deve funcionar (nesse caso, o arquivo2 é atualizado, se você não quiser, remova o sinalizador -i)

   sed -i "s/.*/& $(cat file1)/" file2
    
por 25.08.2015 / 10:30
0
$ sed -e "s/ *\$/ $(cat file1)/" file2
1 2 3 12
4 5 6 12
7 8 9 12
    
por 25.08.2015 / 10:32
0

Para sed lovers - leia file1 para cada linha em arquivo2 , não é uma boa ideia. Muito melhor usar a variável:

my_var=$(<file1) ; sed "s/$/ $my_var/" file2

ou mais seguro

read -r my_var <file1 ; sed "s/$/ $my_var/" file2
    
por 25.08.2015 / 13:12