散布两个文件中的行

散布两个文件中的行

我有一个数据文件 ( $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

所以期望的结果是:

>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

如果我只需要散布其他每一行,我会paste像这样使用:

>paste '-d\n' $file1 $file2

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

答案1

只是:

paste -d '\n' -- - - "$file2" < "$file1"

(前提$file2是不是-)。

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

sed "2~2R$file2" "$file1" < "$file2"

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

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

答案2

如果你不需要维护你可以做的人的秩序cat $file1 $file2 | sort

答案3

其他与awk

awk '
    FNR==NR{
        A[$1]=$0
        next
    }
    1
    !(NR%2){
        print A[$1]
    }
    ' file2 file1

或者如果两个文件都正确排序(正如我们使用 can paste)更简单:

awk '
    1
    !(NR%2){
        getline <"file1"
        print
    }
    ' file1

相关内容