linux - 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
解决方案
我想你正在寻找这样的东西?
#!/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
推荐阅读
- nginx - Nginx 位置路径中的变量
- javascript - 如何在 jhipster/Vue 中关闭 cors 进行开发
- neo4j - 有没有办法在neo4j中合并多个关系与单一ID?
- powershell - Powershell 从存储库运行安装程序可执行文件
- xml - MTOM,“Content-Disposition”标头中的参数“名称”是否有效?
- python - 合并 BTC 价格和当地时间的两个数据框
- python - 无法使用 OpenCV 重叠不同大小的图片
- sql - 在多对多关系中选择 ALL 而不是 ANY
- javascript - 如何禁用锚标记中某些元素的重定向?
- c++ - C++问题,如何查看packing的默认值