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.
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.
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
Com o comando R
do sed do GNU:
sed -e $'R fileb\nR fileb\nR fileb' filea > output