Como intercalar as linhas de dois ou mais arquivos?

9

Eu tentei obter os 2 arquivos em um único arquivo. Eu tentei abaixo do comando:

cat file1 file2

mas aqui file2 data está anexando a file1 .

O que eu preciso é de file1 1a linha seguido por file2 primeira linha e file1 segunda linha seguida por file2 segunda linha etc.

Alguém pode me dizer como fazer isso de uma maneira simples?

    
por user73553 03.07.2014 / 16:15

4 respostas

15

Há um aplicativo para isso!

$ cat file1
file1 line1
file1 line2

$ cat file2
file2 line1
file2 line2

Agora, se você passar esses arquivos como argumentos para paste :

$ paste -d' ' file1 file2
file1 line1 file2 line1
file1 line2 file2 line2

Se por "arquivo1 1a linha seguido por arquivo2 primeira linha e arquivo1 segunda linha seguido por arquivo2 segunda linha etc.", você quer dizer que deseja uma nova linha entre cada linha colada, basta ajustar o -d (delimitador) opção.

$ paste -d'\n' file1 file2
file1 line1
file2 line1
file1 line2
file2 line2
    
por 03.07.2014 / 16:17
2

POSIX Awk; isso funciona com uma quantidade arbitrária de arquivos, e os arquivos não até tem que ter a mesma quantidade de linhas. O roteiro continua até que todos os arquivos estão fora de linha:

BEGIN {
  do {
    br = ch = 0
    while (++ch < ARGC)
      if (getline < ARGV[ch]) {
        printf ch < ARGC - 1 ? $0 FS : $0 RS
        br = 1
      }
  } while (br)
}
    
por 22.06.2016 / 00:39
0

Solução rápida do bash

# Takes as many file arguments as needed
function InterleaveFiles {

    local counter=0
    local hasLine=true

    while [ $hasLine == true ]; do
            hasLine=false
            for i in "$@"; do
                    line=$(awk 'NR == num_line {print; exit}' num_line=$((counter+1)) "$i")
                    if [ -n "$line" ]; then
                            echo "$line"
                    hasLine=true
                    fi
            done
            counter=$((counter+1))
    done
}

InterleaveFiles file1 file2 file3 file4

    
por 21.11.2017 / 21:06
-2
paste -d '\n' file1 file2 > file3

em que file1 e file2 são os arquivos de entrada e file3 será a saída criada.

    
por 25.09.2014 / 10:54