shell每n行插入一行

jea*_*sli 5 shell awk file

我有两个文件,我试图从 file1 的开头开始每隔 4 行将 file2 中的一行插入到 file1 中。例如:

文件1:

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10
Run Code Online (Sandbox Code Playgroud)

文件2:

50
43
21
Run Code Online (Sandbox Code Playgroud)

我想要得到的输出:

50
line 1
line 2
line 3
line 4
43
line 5
line 6
line 7
line 8
21
line 9
line 10
Run Code Online (Sandbox Code Playgroud)

我的代码:

while read line
do
    sed '0~4 s/$/$line/g' < file1.txt > file2.txt
done < file1.txt
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

sed: 1: "0~4 s/$/$line/g": invalid command code ~
Run Code Online (Sandbox Code Playgroud)

gho*_*oti 2

以下步骤遍历这两个文件,而不将其中任何一个加载到内存中的数组中:

awk '(NR-1)%4==0{getline this<"file2";print this} 1' file1
Run Code Online (Sandbox Code Playgroud)

file2如果您的实际值大于您想要保存在内存中的值,这可能会更好。

这细分如下:

  • (NR-1)%4==0- 匹配从 0 开始的每 4 行的条件
  • getline this<"file2"- 从“file2”获取一行并将其存储在变量中this
  • print this- 打印...这个。
  • 1- “打印当前行”的简写,在本例中来自 file1 (awk 的正常输入)