Linux下使用AWK批量替换CSV第一列内容的方法求助
用AWK批量修改第一列内容
你可以用以下AWK命令完成需求,兼顾表头保留和数据替换:
awk 'NR==1{print; next} $1=="N"{$1="Inbound"} $1=="V"{$1="Outbound"} 1' your_file.csv > modified_file.csv
命令解释:
NR==1{print; next}:识别第一行(表头),直接打印后跳过后续处理,避免表头被修改$1=="N"{$1="Inbound"}:当第一列的值是N时,将其替换为Inbound$1=="V"{$1="Outbound"}:当第一列的值是V时,将其替换为Outbound- 末尾的
1:AWK中1代表逻辑真,会触发默认的print操作,输出修改后的整行
直接修改原文件的方式(谨慎操作):
如果不想生成新文件,直接覆盖原文件,可以借助临时文件:
awk 'NR==1{print; next} $1=="N"{$1="Inbound"} $1=="V"{$1="Outbound"} 1' your_file.csv > temp.csv && mv temp.csv your_file.csv
或者安装moreutils包后用sponge命令(更安全,避免原文件损坏):
sudo apt install moreutils awk 'NR==1{print; next} $1=="N"{$1="Inbound"} $1=="V"{$1="Outbound"} 1' your_file.csv | sponge your_file.csv
注:你的示例文件用空格分隔字段,AWK默认以空白字符作为字段分隔符,正好匹配需求;如果是标准逗号分隔的CSV,只需在命令开头加上-F','指定分隔符即可。
内容的提问来源于stack exchange,提问作者gareth0402
相关产品推荐
相关产品推荐

