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
.
只是:
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)