gpt4 book ai didi

bash - 如果找到则使用 awk 替换特定列值

转载 作者:行者123 更新时间:2023-12-02 09:11:46 24 4
gpt4 key购买 nike

如何使用 awk 查找并替换特定列的值?

举例来说 -> 我有一个包含以下内容的文件测试:

"abc":"100"::"new"

"xyz":"200":"mob":"old"

"lmn":"300"::"new"

"pqr":"400":"mob2":"new"

现在,如果第三列为空,那么我想替换 "N/A" 中的空白值,否则按原样打印该行,以便输出如下:

"abc":"100":"N/A":"new"

"xyz":"200":"mob":"old"

"lmn":"300":"N/A":"new"

"pqr":"400":"mob2":"new"

虽然我通过以下命令使用 awk 获得了输出:

awk -F":" '{
if ( $3 == "")
print $1":"$2":\"N\/A\":"$4
else
print $0
}' test

但这里我对每列使用硬编码值,例如 $1$2,因此,如果其他示例中的空白列从 3rd 更改为 xyz,则必须再次更改相同的命令。有没有其他方法可以使用 awk 获得相同的输出,而不使用列的硬编码值?感谢您的帮助。

最佳答案

首先,让我们稍微简化一下当前的程序:

awk -F: 'BEGIN {OFS=FS} {       
if ( $3 == "") $3="N/A"
print $0
}' test

现在我们可以使两件事可变:要测试的列和替换字符串。因此,程序的主体看起来像

if ( $fieldnumber == "" ) $fieldnumber=replacement

剩下要做的就是填写变量。如果您查看 awk 的手册页,您会发现选项 -v 允许我们指定 awk 变量的初始值。

awk -F: -v fieldnumber=... -v replacement=...

这允许您从任何您喜欢的地方填充此变量 - shell 脚本的参数、环境变量等。

更新:修复输出字段分隔符 (OFS)更新:修复语法错误

关于bash - 如果找到则使用 awk 替换特定列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51258235/

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