gpt4 book ai didi

bash - 如何在bash中更新文件中的多字符分隔字段?

转载 作者:行者123 更新时间:2023-12-05 00:52:10 24 4
gpt4 key购买 nike

我正在尝试匹配某个字段并从由多个字符分隔的文件中更新其数据。我正在使用它来模拟 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 例如 $updateUSD

对数据文件的预期更改

'EGP'^_^'Egypt'
'USD'^_^'Europe'
'USD'^_^'Europe'
'USD'^_^'Europe'
'USD'^_^'Europe'
'Europe'^_^'SAR'
'USD'^_^'Europe'
'MYR'^_^'Malaysia'
'MYR'^_^'Malasia'

如果有更好的不同方法,我也很欢迎,因为我对 bash 脚本还很陌生。

最佳答案

最好在这里使用 awk:

awk -v s="'SAR'" -v q="'USD'" -F'\\^_\\^' -v OFS='^_^' '$1==s {$1=q} 1' file

'EGP'^_^'Egypt'
'USD'^_^'Europe'
'USD'^_^'Europe'
'USD'^_^'Europe'
'USD'^_^'Europe'
'Europe'^_^'SAR'
'USD'^_^'Europe'
'MYR'^_^'Malaysia'
'MYR'^_^'Malasia'

说明:

  • -v s="'SAR'" 设置命令行变量s='SAR'
  • -v q="'USD'" 设置命令行变量s='USD'
  • -F '\\^_\\^' 将输入字段分隔符设置为^_^。我们需要转义 ^ 因为它是一个特殊的正则表达式元字符,我们需要双重转义它,因为我们在稍后转换为正则表达式(字段分隔符)的字符串中使用它。<
  • -v OFS='^_^' 将输出字段分隔符设置为 ^_^
  • $1 == s 将第一个字段与 'SAR'
  • 进行比较
  • $1 = q$1 设置为变量 'USD'

关于bash - 如何在bash中更新文件中的多字符分隔字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70609230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com