免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2659 | 回复: 11
打印 上一主题 下一主题

[文本处理] 根据列表替换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-28 14:58 |只看该作者 |倒序浏览
需求是这样的,一个文本中有 1 2 3 4 5 ,我另一个文本中有
1 a
2 b
3 c
4 d
5 e
想把 第一个文本中的 1 2 3 4 5 替换成  a b c d e 不知到怎么实现。我想用awk 取出 1  a  这两个变量,然后在sed 中调用这两个变量。可是不知到awk取出的怎么保存到变量里供sed使用。。。
谢谢了

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
2 [报告]
发表于 2012-12-28 15:22 |只看该作者
本帖最后由 yestreenstars 于 2012-12-28 15:25 编辑
  1. awk 'NR==FNR{a[$1]=$2;next}{for(i=1;i<=NF;i++)b=b?b FS a[$i]:a[$i];print b;b=""}'
复制代码
  1. [root@localhost ~]# cat a
  2. 1 2 3 4 5
  3. [root@localhost ~]# cat b
  4. 1 a
  5. 2 b
  6. 3 c
  7. 4 d
  8. 5 e
  9. [root@localhost ~]# awk 'NR==FNR{a[$1]=$2;next}{for(i=1;i<=NF;i++)b=b?b FS a[$i]:a[$i];print b;b=""}' b a
  10. a b c d e
  11. [root@localhost ~]#
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-12-28 15:34 |只看该作者
这种级别的脚本不是我能看得懂的。。。运行了好久没运行完。。。。

我采用的是这种方法,但是遇到一个问题。
4.txt 是需要替换的文件,

for i in 3.txt;
do a=$(cat $i } awk '{print $1}';
b=$(cat $i " awk '{print $2}';
这时候echo $a $b 都是OK的。
sed -i "s/$b/$b/g" 4.txt;
done;
就会提示sed -e表达式 #1,字符18 unterminated 's' command   

回复 2# yestreenstars


   

论坛徽章:
0
4 [报告]
发表于 2012-12-28 15:36 |只看该作者
单独sed -i "s/1/a/g" 4.txt 事可以替换的也就是说里面使用变量导致了这个问题。不知到怎么解决。是我的sed版本问题么
之前在ubuntu sed里用变量是可以的
回复 2# yestreenstars


   

论坛徽章:
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
5 [报告]
发表于 2012-12-28 15:39 |只看该作者
回复 4# litsands


    什么系统里面会出错?

论坛徽章:
0
6 [报告]
发表于 2012-12-28 15:40 |只看该作者
centos
sed  "s/123/456/g" 4.txt 可以
sed  "s/123/$b/g" 4.txt就提示错误了。

回复 5# Shell_HAT


   

论坛徽章:
0
7 [报告]
发表于 2012-12-28 15:45 |只看该作者
4.1.5 在ubuntu 的上面可以执行。ubuntu sed 4.2.1 但是那个机器上的文件考不出来。。。。谢谢大家指导~~

回复 5# Shell_HAT


   

论坛徽章:
1
射手座
日期:2014-03-10 14:24:52
8 [报告]
发表于 2012-12-28 16:11 |只看该作者
回复 6# litsands

a=123
echo "123456"|sed 's/'$a'/aaa/g'   
aaa456
试试

论坛徽章:
0
9 [报告]
发表于 2012-12-28 16:19 |只看该作者
变量加了但引号也还是会报错。。。。cento5.4   sed  版本 4.1.5回复 8# davidbeckham921


   

论坛徽章:
0
10 [报告]
发表于 2012-12-28 16:43 |只看该作者
有杀气~
误杀的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP