mesclar dois arquivos, primeira linha do primeiro arquivo seguido pela primeira linha do segundo arquivo [duplicado]

7

Eu tenho dois arquivos:

f1:                                      f2:
==============                         ===============
some text line 1                       A1
some text line 2                       A2
some text line 3                       A3

posso mesclar rapidamente esses dois arquivos para produzir f3:

some text line 1
A1
some text line 2
A2
some text line 3 
A3
    
por Forever Learner 07.06.2016 / 11:11

3 respostas

19

É um trabalho para paste :

paste -d'\n' f1.txt f2.txt

Exemplo:

$ cat foo.txt 
some text line 1
some text line 2
some text line 3

$ cat bar.txt 
A1
A2
A3

$ paste -d'\n' foo.txt bar.txt 
some text line 1
A1
some text line 2
A2
some text line 3
A3
    
por 07.06.2016 / 11:16
3

Sim, você pode fazer isso usando um loop while e ler os dois arquivos usando read .

#!/bin/sh

while read file1 <&3 && read file2 <&4
do
    printf "%s\n" "$file1" >> mergedFile.txt
    printf "%s\n" "$file2" >> mergedFile.txt
done 3</path/to/file1/file1.txt 4</path/to/file2/file2.txt

Você pode usar echo em vez de printf . Os resultados estão em mergedFile.txt Se os arquivos que você está processando não são enormes, talvez o acima seja mais fácil e mais portátil que a maioria das soluções.

    
por 07.06.2016 / 11:34
1

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]) {
        print
        br = 1
      }
  } while (br)
}
    
por 08.06.2016 / 03:33