首页 > 解决方案 > shell脚本键值比较2个文件

问题描述

需要有关 shell 脚本的帮助。

文件1.txt

ABC1:10
ABC2:20
ABC3:15

文件2.txt

ABC1:20
ABC2:10
ABC3:10

我必须比较两个文件 file1.txt 和 file2.txt 。当两个文件中的键匹配时,我们必须验证该键的值与第一个文件相比是否更大或相等。

当 ABC1 在 2 个文件中匹配时,比较它的值。10(fil1.txt 中的 ABC1)小于 20(file2.txt 中的 ABC2)它不应该打印,因为第二个 ABC2 20 大于 10 它必须在输出中打印

当我运行 shell 脚本时,它必须显示在输出下方。

ABC2:20
ABC3:15

标签: linuxbashshell

解决方案


我想你正在寻找这样的东西?

#!/bin/bash

for line1 in $(cat $1)
do
    key=$(echo $line1 | sed -E 's/(.+):.+/\1/')
    val1=$(echo $line1 | sed -E 's/.+:(.+)/\1/')

    for line2 in $(grep $key $2)
    do
        val2=$(echo $line2 | sed -E 's/.+:(.+)/\1/')
        if (( $val2 <= $val1 ))
        then
            echo $line1
        fi
    done
done

如果您将其另存为cmp.sh使其可执行,那么您可以将您的文件与

$ ./cmp.sh file1.txt file2.txt

推荐阅读