免费注册 查看新帖 |

Chinaunix

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

(已解决)如何搜索某行文本,找到后替换掉次行某列的内容? [复制链接]

论坛徽章:
0
发表于 2009-11-22 16:15 |显示全部楼层
假设有着两个cksum 生成的文本:
1:

(列1)  (列2)   (列3)
11111            1111            /tmp/a
11112            1112            /tmp/b
11113            1113            /tmp/c
11114            1114            /tmp/d
11115            1115            /tmp/e




2:
(列1)  (列2)   (列3)


11113            1112            /tmp/b
11114            1113            /tmp/c




我如何先读取文件2中的/tmp/b这个文件名,然后在1中查找到对应的行,最后用2中的包含/tmp/b这一行的内容替换掉文件1中的对应的行?


简而言之,根据文件2的第三列的内容来定位文件1列3中对应的这一行,然后用文件2中的第1、2列内容来替代文件1种对应的1、2列的内容。

谢谢!

[ 本帖最后由 h7yqsys00t 于 2009-11-24 17:02 编辑 ]

论坛徽章:
0
发表于 2009-11-22 16:26 |显示全部楼层
awk -F\/ 'BEGIN{while (getline < "2.txt"){a[$2]=$1}}{if($2 in a)
{print a[$2],$2"\/"$3}else {print $0}}' 1.txt

没有环境未调试,如果能将输出文件加一个逗号做分隔符,可能会好处理一些,试试,呵呵。

论坛徽章:
0
发表于 2009-11-22 16:42 |显示全部楼层
awk 'NR==FNR{a[$3]=$1" "$2}NR>FNR{if($3 in a){print a[$3],$3}else{print $1,$2,$3}}' data2 data1

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2009-11-22 16:51 |显示全部楼层
$awk 'NR==FNR{a[$3]=$0}NR>FNR{if($3 in a){print a[$3]}else{print $1,"          ",$2,"          ",$3}}' urfile2 urfile1
11111            1111            /tmp/a
11113            1112            /tmp/b
11114            1113            /tmp/c
11114            1114            /tmp/d
11115            1115            /tmp/e
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP