这是两个文件的内容:
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
的相应行,如下所示:file1
file2
$ 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 比较两个文件的列值”。