使用 awk 比较两个文件的列值

使用 awk 比较两个文件的列值

这是两个文件的内容:

Judi # cat File1  
judi /export/home 76  
judi /usr 83  

judi # cat File2  
judi /export/home 79  
judi /usr 82  

如果 的第 3 列File2大于 的第 3 列File1,则打印File2的行

朱迪/出口/首页 79

答案1

awk 'NR==FNR{a[$1$2]=$3;next}$3>a[$1$2]&&a[$1$2]{print $0}' file1 file2

首先file1读取数组,并a用第三列填充数组,并用第一列和第二列索引。稍后与 的第三个值file2进行比较a,如果较大,则打印整行。

答案2

IFS='
'
for line in $(cat file1); do
  path=$(echo $line|cut -d' ' -f2)
  value1=$(echo $line|cut -d' ' -f3)
  value2=$(grep " $path " file2|cut -d' ' -f3)

  if [[ "$(echo \"$value2>$value1\"|bc)" == "1" ]]; then
    grep " $path " file2;
  fi
done

答案3

对于行的情况按照相同的顺序,有一个更干净的解决方案,用于paste在处理之前合并文件。该命令将合并和paste file1 file2的相应行,如下所示:file1file2

$ cat file1
judi /export/home 76
judi /usr 83
$ cat file2
judi /export/home 79
judi /usr 82
$ paste file1 file2
judi /export/home 76    judi /export/home 79
judi /usr 83    judi /usr 82

然后您可以在管道中使用它,如下awk所示:

$ paste file1 file2 | awk '$6 > $3 {print $4, $5, $6}'
judi /export/home 79

当然,如果行的顺序不同(如您的情况),这将无法正常工作,但它确实回答了标题问题:“使用 awk 比较两个文件的列值”。

相关内容