我有一个 CSV 文件,如下所示:
qw12er,foo,0 bn5mgh
rt8yp,foo,10 gh78jk
bn852mv,foo,852 78ghjkh
tgbr,foo,10 ujmyhn
wsx2d,foo,0000 ui52ohn
tgbr,foo,7418529 ujmyhn
ikl896o,foo,22 wsxdc52
我想修改第三列并删除第三列开头的所有数字和空格。
那么输出将如下:
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
答案1
另一种解决方案是awk
使用sub
:
awk -F, 'sub("^[0-9]+\\s","",$3)' OFS=, file
输出:
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
解释:
-F,
:设置逗号作为输入字段分隔符OFS=,
:设置逗号作为输出字段分隔符(默认为空格)sub("^[0-9]+\\s","",$3)
:删除字符串开头的数字和空格$3
并打印当前行(因为“打印”是 中的默认操作awk
)
通过这种方式,您可以编辑所需的列并打印所有其他列(通常可能很多)。
答案2
我用了awk
:
awk -F"[ ,]" '{print $1","$2","$4 }' yourfile
结果:
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
答案3
在awk
:
awk '{FS="[, ]"; OFS=","; print $1, $2, $4}' filename
在sed
:
sed 's/^\(.*,\)[0-9]* \([^,]*\)$/\1\2/' filename
答案4
根据显示的数据,可以是以下情况sed
sed -r 's/,[0-9 ]+ /,/' file.csv
如果数据变化,正则表达式应该更改为更强大