AWK—比较两个不同文件中两个变量的值

AWK—比较两个不同文件中两个变量的值

我有两个文本文件 A.txt 和 B.txt。A.txt 的每一行都是 A.txt

100
222
398

文本文件

1  2  103  2 
4  5  1026 74
7  8  209  55
10 11 122  78

我正在寻找一个用于执行此操作的 awk 命令:

for each line of A 
    search B;
    if (the value of third column in a line of B - the value of the variable in A > 10)
        print that line of B;

答案1

下面的脚本应该可以解决你的问题:

#!/bin/bash
A="$HOME/a.txt"
B="$HOME/b.txt"

cat $A | while read a; do
    cat $B | while read b; do
        b3=$(echo $b | awk ' { print $3 }')
        c=$(($b3 - $a))
        if (( $c > 10 )); then
            echo $b
        fi
    done
done

不要忘记使用以下命令使其可执行:

chmod +x script_name

答案2

这是另一种方法:

while read i; do awk -v i="$i" '$3-i>10' file2; done < file1

解释:

  • while read i; do ... ; done < file1:这将遍历文件一,并将其​​在那里找到的值(整行)保存为$i
  • awk -v i=$i '$3-i>10' file2:这将遍历 file2 并打印第三个字段小于当前值的每一行$i。诀窍是使用选项将变量传递给awk脚本-v var_name=value

请注意,这个(和 Radu 的)答案将打印每个匹配的行每个变量。结果将有许多重复的行,要删除它们,请使用sort

while read i; do awk -v i="$i" '$3-i>10' file2; done < file1 | sort -u

相关内容