Awk 逐列比较单独文件中的列

Awk 逐列比较单独文件中的列,awk,Awk,我试图逐列比较两个不同的文件,比如file1和file2 两个文件中的字段$1和$2相同,如果一列中的任何值不同,则打印第1列和第2列以及发现不匹配的列号,并打印最后一列中的值,但有行错误 文件1 文件2 期望输出 中的不匹配是错误行中最后一列的值 Mismatch in 1: 36833.00 38033.00 column 8 Mismatch in 3: 37271.00 38885.00 column 4 我试过了 提前感谢这里有一个匹配文件记录编号的选项: awk ' NR ==

我试图逐列比较两个不同的文件,比如file1和file2 两个文件中的字段$1和$2相同,如果一列中的任何值不同,则打印第1列和第2列以及发现不匹配的列号,并打印最后一列中的值,但有行错误

文件1

文件2

期望输出

中的不匹配是错误行中最后一列的值

Mismatch in 1: 36833.00  38033.00 column 8
Mismatch in 3: 37271.00  38885.00 column 4
我试过了


提前感谢

这里有一个匹配文件记录编号的选项:

awk '
NR == FNR {
    a[FNR] = $0                  # match on FNR, you could use a[$1, $2]
    next
}
{
    n = split(a[FNR], b, FS)
    for (i = 3; i <= n; i++) {
        if (b[i] != $i) {
            printf "Mismatch in %d: %s %s column %d\n", FNR, $1, $2, i
        }                        # for 0 starting record numbering use FNR-1 above
    }
}' file1 file2

以下是一个与文件记录编号匹配的文件:

awk '
NR == FNR {
    a[FNR] = $0                  # match on FNR, you could use a[$1, $2]
    next
}
{
    n = split(a[FNR], b, FS)
    for (i = 3; i <= n; i++) {
        if (b[i] != $i) {
            printf "Mismatch in %d: %s %s column %d\n", FNR, $1, $2, i
        }                        # for 0 starting record numbering use FNR-1 above
    }
}' file1 file2

如果我没有弄错你的问题,请你试一下,只根据你的样品。这应该考虑单行上的多个不匹配。工具集说一行中有第3列和第5列不匹配,然后它将同时打印这两个列

awk '
FNR==NR{
  a[FNR]=$0
  b[FNR]=$1 OFS $2
  next
}
{
  num=split(a[FNR],array," ")
  for(i=3;i<=num;i++){
     if($i!=array[i]){
        val=(val?val ",":"")i
     }
  }
  if(val){
     print "Mismatch in line" FNR": " b[FNR]" column(s) "val
     val=""
  }
}'   Input_file1  Input_file2

如果我没有弄错你的问题,请你试一下,只根据你的样品。这应该考虑单行上的多个不匹配。工具集说一行中有第3列和第5列不匹配,然后它将同时打印这两个列

awk '
FNR==NR{
  a[FNR]=$0
  b[FNR]=$1 OFS $2
  next
}
{
  num=split(a[FNR],array," ")
  for(i=3;i<=num;i++){
     if($i!=array[i]){
        val=(val?val ",":"")i
     }
  }
  if(val){
     print "Mismatch in line" FNR": " b[FNR]" column(s) "val
     val=""
  }
}'   Input_file1  Input_file2
试试gnu awk:

awk 'NR==FNR{r[NR]=$0;next}{x=split(r[FNR],a);for(i=3;i<=9;i++){if($i!=a[i]) print "Mismatch in "a[9]": "$1,$2" column "i}}' file1 file2
试试gnu awk:

awk 'NR==FNR{r[NR]=$0;next}{x=split(r[FNR],a);for(i=3;i<=9;i++){if($i!=a[i]) print "Mismatch in "a[9]": "$1,$2" column "i}}' file1 file2

RavinderSingh13先生,谢谢你的代码它工作得很好,谢谢你的帮助RavinderSingh13先生,谢谢你的代码它工作得很好,谢谢你的帮助James,谢谢你的帮助James,谢谢你的代码它工作得很好,谢谢你的帮助
Mismatch in line2: 36833.00 38033.00 column(s) 8
Mismatch in line4: 37271.00 38885.00 column(s) 3
awk 'NR==FNR{r[NR]=$0;next}{x=split(r[FNR],a);for(i=3;i<=9;i++){if($i!=a[i]) print "Mismatch in "a[9]": "$1,$2" column "i}}' file1 file2