gpt4 book ai didi

bash - 如何使用 bash 替换 csv 文件中特定位置的字符串

转载 作者:行者123 更新时间:2023-12-02 17:03:07 25 4
gpt4 key购买 nike

我有几个 .csv 文件,每个 csv 文件都有如下所示的行。

AA,1,CC,1,EE
AA,FF,6,7,8,9
BB,6,7,8,99,AA

我正在阅读每个 csv 文件的每一行,然后尝试将以 AA 开头的每一行的第 4 个位置替换为“ZZ”

预期输出

AA,1,CC,ZZ,EE
EE,FF,6,ZZ,8,9
BB,6,7,8,99,AA

然而,变量“y”确实分别包含第 4 个变量“1”和“7”,但是当我使用 sed 命令时,它会将第一次出现的“1”替换为“ZZ”。

如何修改我的代码以仅替换每行的第 4 个位置,而不管它包含什么值?

我的代码是这样的

$file = "包含所有 csv 文件列表的文件名"

for i in `cat file`
while IFS = read -r line;
do
if [[ $line == AA* ]] ; then
y=$(echo "$line" | cut -d',' -f 4)
sed -i "s/${y}/ZZ/" $i
fi
done < $i

最佳答案

使用 sed,对于以 "AA"开头的行,您还可以指示仅将逗号分隔值文件的第 4 个字段更改为 "ZZ" 与:

sed -i '/^AA/s/[^,][^,]*/ZZ/4' file

解释

  • sed -i 调用 sed 就地编辑文件;
  • 一般形式/find/s/match/replace/occurrence;在哪里
    • 查找是以"AA"开头的/^AA/行;
    • 匹配 [^,][^,]* 一个不是逗号的字符后跟任意数量的非逗号;
    • 替换 /ZZ/4 第 4 次出现的 match"ZZ"

请注意,awksed 都提供了很好的解决方案,请参阅 @perreal 的答案和 @RavinderSingh13

示例输入文件

$ cat file
AA,1,CC,1,EE
AA,FF,6,7,8,9
BB,6,7,8,99,AA

示例使用/输出

(注意: -i 下面没有使用,所以更改只是输出到 stdout)

$ sed '/^AA/s/[^,][^,]*/ZZ/4' file
AA,1,CC,ZZ,EE
AA,FF,6,ZZ,8,9
BB,6,7,8,99,AA

关于bash - 如何使用 bash 替换 csv 文件中特定位置的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53128086/

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