Inserir linhas de um arquivo de entrada a cada n linhas no awk

1

Com os arquivos de entrada A e B, como tal:

Arquivo A

1 1 1
2 2 2
3 3 3

Arquivo B

10 10 10
20 20 20
30 30 30
40 40 40
50 50 50
60 60 60 
70 70 70

Eu gostaria de inserir uma linha do arquivo A a cada 3 linhas do arquivo B, começando com a primeira linha sendo a primeira linha do arquivo A, de modo que a saída seria assim:

1 1 1
10 10 10
20 20 20
30 30 30
2 2 2
40 40 40
50 50 50
60 60 60 
3 3 3 
70 70 70

Minha tentativa original envolveu a criação de arquivos separados para cada três linhas, mas meu conjunto de dados é extremamente grande, por isso estou interessado em economizar espaço no disco rígido.

    
por Spacewaste7 27.03.2018 / 01:49

3 respostas

2

Se você não precisar usar o awk, a colagem funcionará:

$ paste -d '\n' <fileB fileA - - - | tr -s '\n' >fileC

A parte tr não é estritamente necessária, portanto você pode removê-la se não se importar com novas linhas extras.

    
por 27.03.2018 / 03:02
1

Parece um bom caso para getline :

awk '(NR-1)%3 == 0 {getline line < "FileA"; print line} 1' FileB
1 1 1
10 10 10
20 20 20
30 30 30
2 2 2
40 40 40
50 50 50
60 60 60 
3 3 3
70 70 70
    
por 27.03.2018 / 03:23
0

Com o comando R do sed do GNU:

sed -e $'R fileb\nR fileb\nR fileb' filea > output
    
por 27.03.2018 / 03:08

Tags