【发布时间】:2017-09-08 17:18:01
【问题描述】:
我有一个文件 retimp_info.csv,它有两列和大约 500 行,如下所示:
rettag, retid
231,1
还有一个包含多行多列的文件mdb_ret_exp.csv:
a,s,d,231,f,g
a,s,d,345,f,g
所以目标是从第一个文件中找到rettag 并将其替换为retid。现在有多个rettags 需要在mdb_ret_exp.csv 内替换。 (使用逗号,这样可以指定该列,以防该数字出现在我可能不知道的其他任何地方,即不同的列)。
这是我尝试过的:
while IFS="," read -r rettag retid; do
sed -i "s/,$rettag,/,$retid,/" mdb_ret_exp.csv
done < $HOME/retimp_info.csv
它几乎可以工作,但它会在每次替换时添加一个额外的回车:
a,s,d,1
,f,g
a,s,d,345,f,g
我希望它仍然保持在一行:
a,s,d,1,f,g
a,s,d,345,f,g
如何避免额外的回车?
【问题讨论】:
-
看起来你正在运行
s/,231,,/,1,/,而你想要s/, 231,/, 1,/(注意空格和逗号的区别)。您是否已采取任何措施来隔离问题? -
是的,我用我的 ifs 解决了这个简短的问题 > 从某种意义上说是 IFS 错误。