【发布时间】:2022-01-06 15:10:31
【问题描述】:
我正在尝试匹配某个字段并从由多个字符分隔的文件中更新其数据。我正在使用它来模拟 SQL 的 UPDATE。这是使用 bash 创建迷你 DBMS 的更大项目的一部分。
我尝试了什么:
sed "s/\^\_\^/:/g" $file_path | cut -d: -f1 | grep -nw SAR | sed "s/\^\_\^/:/g" | cut -d: -f2 | sed -i "s/$match/$update/g"
我的问题是我无法使用 sed -i 仅更新找到的这些特定列,因为您无法通过管道输入它。
使用的分隔符是:^_^
数据文件示例:
'EGP'^_^'Egypt'
'SAR'^_^'Europe'
'SAR'^_^'Europe'
'SAR'^_^'Europe'
'SAR'^_^'Europe'
'Europe'^_^'SAR'
'SAR'^_^'Europe'
'MYR'^_^'Malaysia'
'MYR'^_^'Malasia'
例如,我的$match 可以是SAR,$update 可以是USD
对数据文件的预期更改
'EGP'^_^'Egypt'
'USD'^_^'Europe'
'USD'^_^'Europe'
'USD'^_^'Europe'
'USD'^_^'Europe'
'Europe'^_^'SAR'
'USD'^_^'Europe'
'MYR'^_^'Malaysia'
'MYR'^_^'Malasia'
如果有更好的不同方法,我也很欢迎,因为我对 bash 脚本还很陌生。
【问题讨论】:
-
如果您有字段,
awk可能是比sed更好的选择。请参阅awk文档中的awkFS变量(字段分隔符)。