我有这个数据:
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/