gpt4 book ai didi

linux - 在 CSV 的列中搜索模式并使用 sed 命令替换同一行中的另一个模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:37 25 4
gpt4 key购买 nike

我想检查 CSV 文件第二列中的模式(仅当模式以以下开头时),如果该模式存在,则替换同一行中的其他内容。

如果模式 676 存在于第二列中,我编写了以下 sed 命令用于跟随 csv 将 I 更改为 N。但它也检查第 7 和第 9 列中的 676,因为 ,676 存在。理想情况下,如果前缀 676 存在,我只想检查第二行。我只想检查第二列中的前缀 676(模式不在第二个值 Ex-46769777 的中间或末尾),然后将 ,I, 更改为 ,N,。

sed -i  '/,676/ {; s/,I,/,N,/;}' temp.csc

6768880,55999777,S,I,TTTT,I,67677,yy
6768880,676999777,S,I,TTTT,I,67677,yy
6768880,46769777,S,I,TTTT,I,67677,yy

要求的预期结果

6768880,55999777,S,I,TTTT,I,67677,yy
6768880,676999777,S,N,TTTT,N,67677,yy
6768880,40999777,S,I,TTTT,I,67677,yy

最佳答案

如果您不受 sed 的约束,awk 可能是您更好的选择。试一试:

awk -F"," '{match($2,/^676/)&&gsub(",I",",N")}{print}' temp.csc

match 语法将第二列匹配到以 (^) 676 开头的数字。gsub 替换 IN

结果:
6768880,55999777,S,I,TTTT,I,67677,yy
6768880,676999777,S,N,TTTT,N,67677,yy
6768880,46769777,S,I,TTTT,I,67677,yy

关于linux - 在 CSV 的列中搜索模式并使用 sed 命令替换同一行中的另一个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29528607/

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