gpt4 book ai didi

linux - 带有 If 条件的 AWK

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:08 25 4
gpt4 key购买 nike

我正在尝试为 ex 替换以下字符串:来自

['55',2,1,10,30,23],  

['55',2,555,10,30,23],

['55',2,1,10,30,23], 

['55',2,1,10,9999,23],

我四处搜索并找到这个:

$ echo "[55,2,1,10,30,23]," | awk -F',' 'BEGIN{OFS=","}{if($1=="[55"){$2=10}{print}}'    

[55,10,1,10,30,23],

但在我的情况下它不起作用,因为在我的 if 条件中 $1 的值周围有“'”:

$ echo "['55',2,1,10,30,23]," | awk -F',' 'BEGIN{OFS=","}{if($1=="['55'"){$2=10}{print}}'

['55',2,1,10,30,23],

最佳答案

问题不在 awk 代码中,而是在 shell 扩展中。单引号 shell 字符串中不能有单引号。这与您尝试将输入字符串放入单引号时遇到的问题相同:

$ echo '['55',2,1,10,30,23],'
[55,2,1,10,30,23],

-- 单引号不见了!这是有道理的,因为他们完成了引用 [,2,1,10,30,23], 的工作(55 在这里没有引号),但这不是我们想要的。

一种解决方案是分别引用它们之间的部分并手动将它们压缩:

$ echo '['\''55'\'',2,1,10,30,23],'
['55',2,1,10,30,23],

或者,在这种特殊情况下,单引号之间应该没有恶意,

echo '['\'55\'',2,1,10,30,23],'   # the 55 is now unquoted.

应用于您的 awk 代码,看起来像这样:

$ echo "['55',2,1,10,30,23]," | awk -F',' 'BEGIN{OFS=","}{if($1=="['\'55\''"){$2=10}{print}}'
['55',10,1,10,30,23],

或者,如果您的代码中有很多单引号,这看起来不太好,您可以将 awk 代码写入一个文件,例如 foo.awk,然后使用

echo "['55',2,1,10,30,23]," | awk -F, -f foo.awk

那么您不必担心 awk 代码中的 shell 引用错误,因为 awk 代码不再受制于 shell 扩展。

关于linux - 带有 If 条件的 AWK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063681/

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