Chinaunix

标题: shell替换字符串 [打印本页]

作者: lilyok12345    时间: 2014-10-16 23:34
标题: shell替换字符串
我有一个文本  
类似
8613302200008,460030902234084,1201,12,600101,2002-03-19 12:00:00,2013-06-29 22:00:50
8613302200009,460030918855095,1001,12,600101,2010-12-30 18:06:51,2011-09-12 05:30:21

我想替换第三列的值,如果是1201则替换成15  ,如果是1001则替换成10,这个应该怎么写?
谢谢~
作者: reb00t    时间: 2014-10-17 00:17
本帖最后由 reb00t 于 2014-10-17 00:17 编辑
  1. awk -F ',' -vOFS=',' '$3==1201{$3=15}$3==1001{$3=10}1'  file
复制代码

作者: yestreenstars    时间: 2014-10-17 09:14
  1. awk 'BEGIN{FS=OFS=","}$3==1201{$3=15}$3==1001{$3=10}1'
复制代码

作者: 聆雨淋夜    时间: 2014-10-17 10:58
回复 3# yestreenstars
awk -F, '$3==1201{$3=15}$3==1001{$3=10}1' 1.txt
我不清楚为什么也要设置OFS,帮忙解释一下哈


   
作者: yestreenstars    时间: 2014-10-17 11:30
回复 4# 聆雨淋夜

如果不修改的话最后会以空格来分隔字段~{:3_193:}
   
作者: 刺客阿地    时间: 2014-10-17 11:45
路过,学习一下。
作者: 可恶的    时间: 2014-10-17 13:04
  1. sed  -r 's/(([0-9]+,){2})1201/\115/;s/(([0-9]+,){2})1001/\110/' filename
复制代码
不得不说,列的处理还是awk方便
作者: jason680    时间: 2014-10-17 14:09
回复 1# lilyok12345

define the changed value in ch3.txt by yourself

$ cat ch3.txt
1201,15
1001,10

$ cat FILE
8613302200008,460030902234084,1201,12,600101,2002-03-19 12:00:00,2013-06-29 22:00:50
8613302200009,460030918855095,1001,12,600101,2010-12-30 18:06:51,2011-09-12 05:30:21

$ awk 'BEGIN{FS=OFS=","}NR==FNR{a[$1]=$2;next}{if(a[$3]!="")$3=a[$3]}1' ch3.txt FILE
8613302200008,460030902234084,15,12,600101,2002-03-19 12:00:00,2013-06-29 22:00:50
8613302200009,460030918855095,10,12,600101,2010-12-30 18:06:51,2011-09-12 05:30:21

   
作者: yestreenstars    时间: 2014-10-17 14:29
回复 8# jason680

不走寻常路啊~{:3_193:}
   
作者: jason680    时间: 2014-10-17 15:17
回复 9# yestreenstars

这才是寻常路
只为了改两个就来写脚本程序...!!??
   
作者: yestreenstars    时间: 2014-10-17 15:28
回复 10# jason680

{:3_201:}
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2