代码之家  ›  专栏  ›  技术社区  ›  Agathe

awk比较两个文件中的多列

  •  0
  • Agathe  · 技术社区  · 6 年前

    我想比较两个文件中的多个列,而不是打印符合我的条件的行。 例如:

    apple  green  4
    orange  red  5
    apple  yellow 6
    apple  yellow 8
    grape  green 5
    

    apple  yellow 7
    grape  green 10
    

    apple  green  4
    orange  red  5
    apple  yellow 8
    

    我想把线移到哪里 $1 $2 file1 对应 $1 file2 什么时候 $3 文件1 文件2 . 我现在只能做第一部分的工作,那就是删除线在哪里 $2 文件1 $2 文件2 (字段由选项卡分隔):

    awk -F '\t' 'FNR == NR {a[$1FS$2]=$1; next} !($1FS$2 in a)' file2 file1
    

    你能帮我申请最后一个条件吗?

    非常感谢!

    2 回复  |  直到 6 年前
        1
  •  3
  •   kvantour    6 年前

    你想要的是:

    awk '(NR==FNR){a[$1,$2]=$3; next}!(($1,$2) in a) && a[$1,$2] < $3))' <file2> <file1>
    
        2
  •  3
  •   Sundeep    6 年前

    在构建数组时存储第三个字段值,然后将其用于比较

    $ awk -F '\t' 'FNR==NR{a[$1FS$2]=$3; next} !(($1FS$2 in a) && $3 > a[$1FS$2])' f2 f1
    apple   green   4
    orange  red 5
    apple   yellow  6
    grape   green   5
    

    awk -F '\t' '{k = $1FS$2} FNR==NR{a[k]=$3; next} !((k in a) && $3 > a[k])' f2 f1