求单行命令:对比两文件按Key取对应较小数值输出
单行命令实现按Key取两个文件中的较小数值
嘿,这有个精准的单行命令能满足你的需求——对比两个逗号分隔的Key-Value文件,为每个Key保留数值更小的那一行:
join -t, File1 File2 | awk -F, '{print $1","($2<$3?$2:$3)}'
来拆解下这个命令的逻辑:
join -t, File1 File2:用逗号作为字段分隔符,将两个文件按第一列(也就是Key)进行合并,输出的每一行格式是KEY,File1的数值,File2的数值awk -F, '{print $1","($2<$3?$2:$3)}':同样以逗号分割每行,判断第二列(File1的数值)和第三列(File2的数值)的大小,输出Key加上较小的那个数值
示例验证
输入文件内容
File1:
KEY1,4999 KEY2,3999 KEY3,5999 KEY4,10999
File2:
KEY1,11905 KEY2,6872 KEY3,2393 KEY4,296360
执行命令后输出
KEY1,4999 KEY2,3999 KEY3,2393 KEY4,10999
额外补充:如果Key顺序不一致怎么办?
要是两个文件的Key排列顺序不一样,先给两个文件排序再合并就行,命令调整为:
join -t, <(sort File1) <(sort File2) | awk -F, '{print $1","($2<$3?$2:$3)}'
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

