shell - 比较两个文件(文件 1 和文件 2),如果两个文件的第一列匹配,则从文件 2 到文件 1 添加一列

标签 shell awk

我有两个文件(file1 和 file2)

文件1

ABC=14.2.0.7.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/abc/patch142007
DEF=14.3.0.5.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/def/patch143005
DEF=14.3.0.5.SAMPLE2=git.calypso/plugins/gitiles/+/refs/heads/clientpatch/def/patch14300-calib
HIJ=12.0.0.0.Sp3.SAMPLE3=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/hij/patch120000sp3
MNO=16.1.0.28.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/mno/patch161028

......(150行)

文件2

IJK = open 
ABC = closed 
PQR = closed 
DEF = open 
HIJ = open 
LMN = closed
MNO = closed 
PQR = open

......(>150行)

输出文件

ABC=14.2.0.7.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/client/abc/patch142007=closed
DEF=14.3.0.5.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/client/def/patch143005=open
DEF=14.3.0.5.SAMPLE2=git.xyz/plugins/gitiles/+/refs/heads/client/def/patch14300-calib=open
HIJ=12.0.0.0.Sp3.SAMPLE3=git.xyz/plugins/gitiles/+/refs/heads/client/hij/patch120000sp3=open
MNO=16.1.0.28.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/client/mno/patch161028=closed

我尝试过以下脚本。但它没有给我任何输出。甚至不打印任何东西。没有错误

while IFS= read -r line
do
key1=`echo $line | awk -F "=" '{print $1}'` < file1
key2=`echo $line | awk -F "=" '{print $2}'` < file1 
key3=`echo $line | awk -F "=" '{print $3}'` < file1 
key4=`echo $line | awk -F "=" '{print $1}'` < file2   
value3=`echo $line | awk -F "=" '{print $2}'` < file2   
if [ "$key1" == "$key4" ]; then   
echo "$key1=$key2=$key3=$value3"   
fi   
done 

简要描述代码应如何工作。

代码应比较两个文件(文件 1 和文件 2)的第一列。如果每个名称都匹配,它应该为我提供上面列出的输出文件。否则转到下一行。如果我的两个文件是排序或未排序的格式,我应该得到输出。 帮助将不胜感激。谢谢

最佳答案

或者使用 awk 的另一种方法,将 file2 值存储在数组中,然后将正确的状态附加到 file1 中的相应行:

awk -F' = ' 'NR==FNR {a[$1]=$2; next} {print $0"="a[$1]}' file2 FS="=" file1

示例使用/输出

$ awk -F' = ' 'NR==FNR {a[$1]=$2; next} {print $0"="a[$1]}' file2 FS="=" file1
ABC=14.2.0.7.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/abc/patch142007=closed
DEF=14.3.0.5.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/def/patch143005=open
DEF=14.3.0.5.SAMPLE2=git.calypso/plugins/gitiles/+/refs/heads/clientpatch/def/patch14300-calib=open
HIJ=12.0.0.0.Sp3.SAMPLE3=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/hij/patch120000sp3=open
MNO=16.1.0.28.SAMPLE=git.xyz/plugins/gitiles/+/refs/heads/clientpatch/mno/patch161028=closed

关于shell - 比较两个文件(文件 1 和文件 2),如果两个文件的第一列匹配,则从文件 2 到文件 1 添加一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60256442/

相关文章:

bash - 如何显示某列的总和?

linux-mint 非交互式 shell 启动文件

linux - 使用 Linux Shell 的解析器文件

linux - Shell脚本,使用awk进行对角词搜索

shell - Powershell 模块和调用文件

awk - awk中的二维数组处理

bash - 测试文件中的模式是否存在,评估是否存在

bash - 如何在称为条件的shell函数中可靠地处理错误?

bash - nawk 将列添加到每一行

linux - 使用 top 从 PID 和 COMMAND 获取前 5 行