免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1471 | 回复: 3

[文本处理] 求第一个文件某列的每个值与第二个文件某列的每个值的最小差值 [复制链接]

论坛徽章:
0
发表于 2019-02-21 08:55 |显示全部楼层
a.txt
1 1068 + 2 1 M L U L L U
1 1070 + 1 2 U L M L L U
1 1076 + 2 1 M L U L U M
1 1083 + 3 0 M L U L U U
1 1089 + 0 3 U L U L U M
1 1090 + 0 3 U L U L M M
1 1097 + 3 0 M L M U U U
1 1133 - 2 2 M U L L U U
1 1144 - 4 0 M U L L U M
1 1146 - 2 2 M U L U U M
1 1155 - 4 0 M U L U M M
1 1157 - 0 4 U U L U M M
b.txt
1065
1079
1099
1156
1250
1256
1356
用a.txt的第二列的每个值分别去减b.txt的每个值,分别得到a.txt第二列每个值与b.txt第一列的最小差值,不分正负,想得到的结果文件
c.txt
1 1068 + 2 1 M L U L L U 3
1 1070 + 1 2 U L M L L U 5
1 1076 + 2 1 M L U L U M -3
1 1083 + 3 0 M L U L U U 4
1 1089 + 0 3 U L U L U M 10
1 1090 + 0 3 U L U L M M -9
1 1097 + 3 0 M L M U U U -2
1 1133 - 2 2 M U L L U U -23
1 1144 - 4 0 M U L L U M -12
1 1146 - 2 2 M U L U U M -10
1 1155 - 4 0 M U L U M M -1
1 1157 - 0 4 U U L U M M 1

论坛徽章:
0
发表于 2019-02-21 14:42 |显示全部楼层
  1. $ awk 'function abs(v){return (v<0?-v:v)} FNR==NR{b[$1]=$1; next} {for (i in b){ diff=$2-b[i]; if (length(min)==0){min=abs(diff); mdiff=diff; continue}; if (abs(diff)<min) {min=abs(diff); mdiff=$2-b[i]}}; print $0,mdiff; min=""}' b.txt a.txt


  2. 1 1068 + 2 1 M L U L L U 3
  3. 1 1070 + 1 2 U L M L L U 5
  4. 1 1076 + 2 1 M L U L U M -3
  5. 1 1083 + 3 0 M L U L U U 4
  6. 1 1089 + 0 3 U L U L U M 10
  7. 1 1090 + 0 3 U L U L M M -9
  8. 1 1097 + 3 0 M L M U U U -2
  9. 1 1133 - 2 2 M U L L U U -23
  10. 1 1144 - 4 0 M U L L U M -12
  11. 1 1146 - 2 2 M U L U U M -10
  12. 1 1155 - 4 0 M U L U M M -1
  13. 1 1157 - 0 4 U U L U M M 1
复制代码

评分

参与人数 1信誉积分 +5 收起 理由
hechao7021 + 5 很给力!

查看全部评分

论坛徽章:
0
发表于 2019-02-21 17:00 |显示全部楼层
太好了,感激不尽

论坛徽章:
0
发表于 2019-02-21 17:01 |显示全部楼层
回复 2# csccyab
太好了,您又帮了我一次,感激不尽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP