linux - 如何替换 csv 所有列中的特定值?

标签 linux awk

我有这个数据:

111,24,1,\N,\N,[],aa
222,25,2,\N,\N,[],bb
333,26,3,\N,\N,[],\N

我想使用 awk 替换第 4 和第 5 列中的所有 \N 值。

我写了这个,但不确定我的方法是否正确:

awk -F "," '{print $1 "," $2 "," $3 "," $4/ "," $5/ "," $6 "," $7}'

这个解决方案不灵活。如果我有 100 列怎么办?

更新

预期输出:

111,24,1,4.3,2.1,[],aa
222,25,2,4.3,2.1,[],bb
333,26,3,4.3,2.1,[],\N

最佳答案

我会写:

awk '
    BEGIN {FS = OFS = ","}
    $4 == "\\N" {$4 = 4.3}
    $5 == "\\N" {$5 = 2.1}
    {print}
' file

或者,如果你的实际情况更复杂,比如

awk '
    BEGIN {
        FS = OFS = ","
        repl[4] = 4.3
        repl[5] = 2.1
        repl[7] = "hello"
    }
    {for (i in repl) if ($i == "\\N") $i = repl[i]}
    {print}
' file

关于linux - 如何替换 csv 所有列中的特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45217576/

相关文章:

c++ - 如何在 Linux 中使用 exec 函数族执行 a.out 文件

linux - 不能将 gpg-agent 用作 ssh 代理

awk - 打印 `awk` 中的倒数第二列/字段

bash - 将 awk 的输出保存到两个不同的变量

shell - 搜索多个字符串

linux - 真实用户 ID、有效用户 ID 和已保存用户 ID 之间的区别

c++ - 如何针对自定义 gcc 库强制 cmake 链接

regex - 正则表达式: how to deal with character/

linux - 查找第一列的最小值和最大值 - 按第二列分组

linux - 如何使用 bash 脚本计算一个单词中出现次数最多的 3 个字母序列