bash - 如何使用 sed/awk 替换以逗号分隔的字符串中的第 n 列/字段?

标签 bash replace sed awk csv

假设我有一个字符串

"1,2,3,4"

现在我想替换,例如字符串的第三个字段由一些不同的值。

"1,2,NEW,4"

我设法用下面的命令做到了这一点:

echo "1,2,3,4" | awk -F, -v OFS=, '{$3="NEW"; print }'

现在,要替换的列的索引应作为变量传递。所以在这种情况下

index=3

我如何将它传递给 awk?因为这行不通:

echo "1,2,3,4" | awk -F, -v OFS=, '{$index="NEW"; print }'
echo "1,2,3,4" | awk -F, -v OFS=, '{$($index)="NEW"; print }'
echo "1,2,3,4" | awk -F, -v OFS=, '{\$$index="NEW"; print }'

感谢您的帮助!

最佳答案

这可能对你有用:

index=3 
echo "1,2,3,4" | awk -F, -v OFS=, -v INDEX=$index '{$INDEX="NEW"; print }'

或:

index=3 
echo "1,2,3,4" | sed 's/[^,]*/NEW/'$index

关于bash - 如何使用 sed/awk 替换以逗号分隔的字符串中的第 n 列/字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9838160/

相关文章:

c# 替换字符串中字符选择的每个实例

list - prolog 使用设置函数头将列表中的元素替换为另一个元素?

linux - 错误 SED 语法 : unknown command: `0'

bash - 将文件从一个位置复制到另一个位置并重命名的 Shell 脚本将当前日期添加到每个文件

linux - 尝试获取具有最大行数的文件以使用行号打印

linux - bash tar 错误不会创建 tar.gz

regex - Qt Creator 在编辑 : forcing capture to uppercase 时搜索/替换为正则表达式

vbscript - 提取 HTML 标签之间的文本

linux - 查找并替换文档中的文本

bash - 为什么 EOF 中的代码显示此错误?