如果文件中的数字位于两列之间,则打印行

如果文件中的数字位于两列之间,则打印行

我想将文件 1 中的数字 id 列表与两列(每行都有不同的数字/id)进行匹配

>cat file1
1 23444
3 422255223
1 35541 

并仅打印较大文件 (file2) 中第一列匹配且第二列 id 位于文件 2 中的 id 之间的行。

>cat file 2
1 10 30 XP2
1 31 50 XP34
1 23000 25000 XP56
2 19000 30000 Xp9J

运行脚本,理想情况下,如果找到匹配,它将仅输出文件 1 中的 ID,然后输出列间匹配之后的任何匹配列,例如:

 awk code file1 file2
 1 23444 XP56

已经有一个接近这里发布的问题的解决方案: Awk - 如果数字在第 1 列和第 2 列之间,则打印行

但我正在努力修改该脚本以适应 2 列的匹配并逐行查询文件 (file1)。

答案1

这个答案是 GNU-awk 特定的:它使用数组的数组

gawk '
    NR == FNR { f1[$1][$2] = 1; next }
    $1 in f1 {
        for (val in f1[$1]) {
            if (0+$2 <= 0+val && 0+val <= 0+$3) {
                print $1, val, $4
            }
        }
    }
' file1 file2

0+xif 条件中的业务确保将您的值作为数字而不是字符串进行比较。这是需要的,因为细绳比较,“10”<=“23444”<=“30”是真的

相关内容