gpt4 book ai didi

regex - awk:如果不为零则替换第二列

转载 作者:行者123 更新时间:2023-12-01 07:44:03 26 4
gpt4 key购买 nike

我正在尝试使用 awk 检查三列数据集的第二列,如果不为零则替换其值。我发现 this regex 可以找到非零数字,但我不知道如何将 gsubprint 结合起来替换内容并将其输出到新文件。我只想在第二列上运行 gsub,而不是第一列或第三列。是否有一个简单的 awk one-liner 来做到这一点?或者我正在考虑做一些更复杂的事情?我什至尝试做一个表达式来检查零,但我不确定如何在 awk 中执行 if/else 语句。

我半成功的命令是:
awk '$2 != 0 {print $1, 1, $3}' input > output
问题是如果第二列为零,它不会打印出该行。这是我认为 gsub 或 if/else 语句可以工作的地方,但我无法弄清楚 awk 语法。对此的任何指导将不胜感激。

最佳答案

请记住,在 awk 中,任何不是 0 的都是真的(尽管任何不是“0”的字符串也是真的)。所以:

awk '$2 { $2 = 1; print }' input > output

如果 $2 不是 0 ,则计算结果为 true 。其余的很明显。这将复制您的脚本。

如果要打印所有行,包括 $2 中带有零的行,我会这样做:
awk '$2 { $2 = 1 } 1' input > output

这与上面的替换相同,但最后的 1 是“true”的简写。没有语句, {print} 的默认语句就运行了。

这是你要找的吗?

在行动中,它看起来像这样:
[ghoti@pc ~]$ printf 'none 0 nada\none 1 uno\ntwo 2 tvo\n'
none 0 nada
one 1 uno
two 2 tvo
[ghoti@pc ~]$ printf 'none 0 nada\none 1 uno\ntwo 2 tvo\n' | awk '$2 { $2 = 1 } 1'
none 0 nada
one 1 uno
two 1 tvo
[ghoti@pc ~]$

关于regex - awk:如果不为零则替换第二列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13619204/

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