linux - 填充 CSV 文件中的空白
问题描述
我有一个 CSV 文件,其中一些列是空的,例如
oski14,safe,0,13,53,4
oski15,Unknow,,,,0
oski16,Unknow,,,,0
oski17,Unknow,,,,0
oski18,unsafe,0.55,,1,2
oski19,unsafe,0.12,4,,56
如何用“空”一词替换所有空列。我尝试过使用 awk(这是我正在学习使用的命令)。
我希望有
oski14,safe,0,13,53,4
oski15,Unknow,empty,empty,empty,0
oski16,Unknow,empty,empty,empty,0
oski17,Unknow,empty,empty,empty,0
oski18,unsafe,0.55,empty,1,2
oski19,unsafe,0.12,4,empty,56
我试图只替换第 3 列,看看我是否在正确的轨道上
awk -F '[[:space:]]' '$2 && !$3{$3="empty"}1' file
这给我留下了
oski14,safe,0,13,53,4
oski15,Unknow,,,,0
oski16,Unknow,,,,0
oski17,Unknow,,,,0
oski18,unsafe,0.55,,1,2
oski19,unsafe,0.12,4,,56
我也试过
nawk -F, '{$3="\ "?"empty":$3;print}' OFS="," file
这导致
oski14,safe,empty,13,53,4
oski15,Unknow,empty,,,0
oski16,Unknow,empty,,,0
oski17,Unknow,empty,,,0
oski18,unsafe,empty,,1,2
oski19,unsafe,empty,4,,56
最后我尝试了
awk '{if (!$3) {print $1,$2,"empty"} else {print $1,$2,$3}}' file
这给我留下了
oski14,safe,empty,13,53,4 empty
oski15,Unknow,empty,,,0 empty
oski16,Unknow,empty,,,0 empty
oski17,Unknow,empty,,,0 empty
oski18,unsafe,empty,,1,2 empty
oski19,unsafe,empty,4,,56 empty
解决方案
使用支持带-E
参数的 ERE 的 sed(例如 GNU sed 或 OSX/BSD sed):
$ sed -E 's/(^|,)(,|$)/\1empty\2/g; s/(^|,)(,|$)/\1empty\2/g' file
oski14,safe,0,13,53,4
oski15,Unknow,empty,empty,empty,0
oski16,Unknow,empty,empty,empty,0
oski17,Unknow,empty,empty,empty,0
oski18,unsafe,0.55,empty,1,2
oski19,unsafe,0.12,4,empty,56
您需要进行两次替换,因为给定的连续逗号(例如,,,
一个正则表达式匹配)会用完前 2,
秒,因此您将剩下,empty,,
.
以上会将一个完全空的行更改为empty
,让我们知道这是否是一个问题。
推荐阅读
- maven - 我在tomcat 8中部署spring boot api嵌套异常是org.springframework.beans.factory.UnsatisfiedDependencyException
- excel - 从 Activex 控件映射变量 - [VBA]
- terminal - 使用 csplit 根据分隔符拆分文本文件时遇到问题
- api - 用于管理虚拟机的 Google Cloud Compute Engine API 密钥
- python - 我的代码(Python、列表、字符串)有什么问题?
- react-native - React Native Redux 性能问题应用程序冻结
- python - pygame如何实现精灵的矩形
- regex - Golang 正则表达式替换字符串之间
- c++ - 用 new 分配静态数组
- javascript - Framer X - 屏幕/帧之间的自定义转换