我有file
像这样:
1,2,3,4
5,6,7,8
我想将第二列替换为6到89。所需的输出是
1,2,3,4
5,89,7,8
但是如果我输入
index=2
cat file | sed 's/[^,]*/89/'$index
我知道
1,89,3,4
5,89,7,8
如果我输入
index=2
cat file | sed 's/[^,]6/89/'$index
没有任何变化。 为什么会这样呢?我怎样才能解决这个问题?谢谢。
答案 0 :(得分:2)
由于您要更改包含6
的第二列,并且使用逗号作为字段分隔符,因此使用sed
实际上非常简单:
sed 's/^\([^,]*\),6,/\1,89,/`
在这里,我们利用向后引用来记住第一列。
如果要替换第5列中的6
,可以执行以下操作:
sed 's/^\(\([^,]*,\)\{4\}\)6,/\189,/'
但是,使用awk
更舒适:
awk 'BEGIN{FS=OFS=","}($2==6){$2=89}1'
答案 1 :(得分:0)
我通过使用awk解决了这个问题
awk 'BEGIN{FS=OFS=","} {if ($2==6) $2=89}1' file >file1