awk 找到两个文件的公共行并将这些行合并到第三个文件中的一行

CEPHAS

我是 awk 和 shell 的新手。我想操作一些文件并根据一列找到两个文件的公共行

并将文件 1 中的行和文件 2 中的行的组合写入文件 3 中的一行。

我在网上检查了许多建议的解决方案,这使我得到了以下结果。我使用的文件结构和命令如下。

文件1.tab

 name    level   regno   dept    sex
 john    900     123     csc     male
 debby   800     378     mth     male
 ken     800     234     csc     male
 sol     700     923     mth     female
 dare    900     273     phy     male
 olanna  800     283     csc     female
 olumba  400     245     phy     male
 petrus  800     284     mth     female

文件2.tab

 regno   grade
 234     A
 283     D
 123     A
 273     B

我可以使用此命令获取file3.tab

awk 'NR==FNR{a[$1];next} $3 in a {print $0}' file2.tab file1.tab > file3.tab

文件3.tab

 name    level   regno   dept    sex
 john    900     123     csc     male
 ken    800     234     csc     male
 dare     900     273     phy     male
 olanna     800     283     csc     female

但我想要的是整个 file1 行,file2 行像这样附加到它上面

 name    level   regno   dept    sex    regno    grade
 john    900     123     csc     male    123    A
 ken    800     234     csc     male    234    A
 dare     900     273     phy     male    273    B
 olanna     800     283     csc     female    283    D

其次,我也想以这种格式获取file3.tab

 name    level   regno   dept    sex    grade
 john    900     123     csc     male    A
 debby   800     378     mth     male    NA
 ken     800     234     csc     male    A
 sol     700     923     mth     female    NA
 dare    900     273     phy     male    B
 olanna  800     283     csc     female    D
 olumba  400     245     phy     male    NA
 petrus  800     284     mth     female    NA

我用过这个命令

awk 'FNR==NR{a[$1]=$1;next}{print $0, "\t" (($3 in a)? a[$1]:"NA")}' file2.tab file1.tab > file3-2.tab

但我得到的是这个,file2.tab 中的成绩没有显示

 name    level   regno   dept    sex   
 john    900     123     csc     male   
 debby   800     378     mth     male    NA
 ken     800     234     csc     male   
 sol     700     923     mth     female    NA
 dare    900     273     phy     male   
 olanna  800     283     csc     female   
 olumba  400     245     phy     male    NA
 petrus  800     284     mth     female    NA

所有文件均以制表符分隔。请帮我解决这些问题。

阿努巴瓦

您可以使用此 awk 命令来实现您的输出:

awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2;next} {
     print $0, ($3 in a ? a[$3] : "NA")}' file2.tab file1.tab

name    level  regno  dept  sex     grade
john    900    123    csc   male    A
debby   800    378    mth   male    NA
ken     800    234    csc   male    A
sol     700    923    mth   female  NA
dare    900    273    phy   male    B
olanna  800    283    csc   female  D
olumba  400    245    phy   male    NA
petrus  800    284    mth   female  NA

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

awk-从一个文件中随机提取一行,并将其与另一个文件中的行合并,输出到第三个文件

来自分类Dev

合并两个文件,用awk跳过1个文件的最后一行

来自分类Dev

Awk比较3个值,第一个文件值之间的第二个文件值,两个文件之间的多列打印输出到第三个文件

来自分类Dev

awk匹配同一行中两个文件中的两个字段

来自分类Dev

如何使用一个文件中的索引值进行 awk 打印,从第二个文件中提取数据,并将输出保存到第三个文件中?

来自分类Dev

使用awk和UNIX使用4个字段找出两个文件中的公共行

来自分类Dev

使用AWK连接两个文件的某些行,然后对合并的文件进行排序

来自分类Dev

比较Awk中的三个文件

来自分类Dev

合并两个csv文件,以使用两个现有csv文件中的选定行生成第三个csv文件

来自分类Dev

使用awk在三个字段上合并两个csv文件也会创建一个新的csv文件

来自分类Dev

选择两个码型之间的第一个匹配项。如果使用sed / awk / grep找到了第三个码型,则重新开始搜索

来自分类Dev

awk要求合并两个文件

来自分类Dev

Linux AWK合并两个文件

来自分类Dev

awk 合并两个文件

来自分类Dev

awk-连接两个字符串变量并分配给第三个

来自分类Dev

awk +如何在两个字符上捕获第三个字段

来自分类Dev

使用SED或AWK复制与xml文件中两个不同模式匹配的两行

来自分类Dev

基于一列Awk合并两个文件

来自分类Dev

通过一列AWK合并两个文件

来自分类Dev

按一列合并两个文件 - awk

来自分类Dev

awk比较三个文件并合并输出

来自分类Dev

如何合并来自awk中两个文件的数据

来自分类Dev

如何使用awk将两个模式之间未知数量的多行合并为一行

来自分类Dev

使用awk将两个模式之间的行输出到不同的输出文件中

来自分类Dev

使用sed或awk修改文件中符合两个条件的行

来自分类Dev

awk 中的两个文件处理

来自分类Dev

如何将两个Excel工作表中的所有行合并到第三个工作表中?

来自分类Dev

awk一行

来自分类Dev

如何将两个文件之间的差异结果合并到第三个文件?

Related 相关文章

  1. 1

    awk-从一个文件中随机提取一行,并将其与另一个文件中的行合并,输出到第三个文件

  2. 2

    合并两个文件,用awk跳过1个文件的最后一行

  3. 3

    Awk比较3个值,第一个文件值之间的第二个文件值,两个文件之间的多列打印输出到第三个文件

  4. 4

    awk匹配同一行中两个文件中的两个字段

  5. 5

    如何使用一个文件中的索引值进行 awk 打印,从第二个文件中提取数据,并将输出保存到第三个文件中?

  6. 6

    使用awk和UNIX使用4个字段找出两个文件中的公共行

  7. 7

    使用AWK连接两个文件的某些行,然后对合并的文件进行排序

  8. 8

    比较Awk中的三个文件

  9. 9

    合并两个csv文件,以使用两个现有csv文件中的选定行生成第三个csv文件

  10. 10

    使用awk在三个字段上合并两个csv文件也会创建一个新的csv文件

  11. 11

    选择两个码型之间的第一个匹配项。如果使用sed / awk / grep找到了第三个码型,则重新开始搜索

  12. 12

    awk要求合并两个文件

  13. 13

    Linux AWK合并两个文件

  14. 14

    awk 合并两个文件

  15. 15

    awk-连接两个字符串变量并分配给第三个

  16. 16

    awk +如何在两个字符上捕获第三个字段

  17. 17

    使用SED或AWK复制与xml文件中两个不同模式匹配的两行

  18. 18

    基于一列Awk合并两个文件

  19. 19

    通过一列AWK合并两个文件

  20. 20

    按一列合并两个文件 - awk

  21. 21

    awk比较三个文件并合并输出

  22. 22

    如何合并来自awk中两个文件的数据

  23. 23

    如何使用awk将两个模式之间未知数量的多行合并为一行

  24. 24

    使用awk将两个模式之间的行输出到不同的输出文件中

  25. 25

    使用sed或awk修改文件中符合两个条件的行

  26. 26

    awk 中的两个文件处理

  27. 27

    如何将两个Excel工作表中的所有行合并到第三个工作表中?

  28. 28

    awk一行

  29. 29

    如何将两个文件之间的差异结果合并到第三个文件?

热门标签

归档