两个文件中的散布行

Sim*_*lon 3 shell-script text-processing paste

我有一个数据文件 ( $file1),其中每个人包含两行数据。我需要穿插来自另一个数据文件 ( $file2)的第三行数据。所以我的输入看起来像:

>cat $file1
  bob  1  1  0
  bob  1  0  1
  alan 0  0  1
  alan 0  1  1

>cat $file2
 bob  a  a  b
 alan a  c  a
Run Code Online (Sandbox Code Playgroud)

所以想要的结果是:

>cat $file3
  bob  1  1  0
  bob  1  0  1
  bob  a  a  b
  alan 0  0  1
  alan 0  1  1
  alan a  c  a
Run Code Online (Sandbox Code Playgroud)

如果我只需要穿插每隔一行,我会paste像这样使用:

>paste '-d\n' $file1 $file2
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳工具是什么?我正在使用zsh.

Sté*_*las 9

只是:

paste -d '\n' -- - - "$file2" < "$file1"
Run Code Online (Sandbox Code Playgroud)

(前提$file2是不是-)。

或者使用 GNU sed,提供$file2(变量内容,文件名)不包含换行符并且不以空格或制表符开头:

sed "2~2R$file2" "$file1" < "$file2"
Run Code Online (Sandbox Code Playgroud)

使用awk(前提$file1是不包含=字符(或者至少如果包含,则它之前的部分不是可接受的 awk 变量名称)):

export file2
awk '{print}
     NR % 2 == 0 {if ((getline l < ENVIRON["file2"]) > 0) print l}
    ' "$file1"
Run Code Online (Sandbox Code Playgroud)