如何使用awk修改CSV指定列后将输出重定向保存到原文件
问题原因
你执行的命令会清空原文件是因为Shell的重定向操作>会在命令启动前先截断清空目标文件,等到awk命令开始读取a.csv的时候,文件已经是空的了,自然没有内容输出。
正确实现方案
两种常用方案可实现需求:
- GNU Awk(大部分Linux系统默认预装的awk版本)支持原地修改参数,直接添加
-i inplace选项即可:awk -i inplace 'BEGIN{FS=OFS=","} {$19 = $1} 1' a.csv - 全平台通用方案:先写入临时文件,确认执行成功后再替换原文件,避免意外数据丢失:
awk 'BEGIN{FS=OFS=","} {$19 = $1} 1' a.csv > a.csv.tmp && mv a.csv.tmp a.csv
注意事项
如果你的CSV包含带逗号、换行的引号包裹字段,单纯按,分割字段的逻辑会出错,需要用专门处理CSV的工具处理,如果你当前的命令已经能正确输出处理结果,说明你的CSV为无特殊字符的简单格式,直接用上述方案即可。
内容的提问来源于stack exchange,提问作者cildirmicam
相关产品推荐
相关产品推荐

