如何用Bash的sed工具按条件拼接CSV文件第二列字符串
针对CSV指定列的条件修改方案
问题场景
现有CSV文件内容:
A,12345,hello B,67890,hi A,123456,yo
需要实现:仅当第一列值为A时,在第二列末尾追加两个0,预期输出:
A,1234500,hello B,67890,hi A,12345600,yo
方法一:使用sed命令
给你之前的sed命令添加行匹配条件,仅对第一列为A的行执行替换:
sed '/^A,/ s/,/00,/2' your_file.csv
/^A,/:限定仅处理以A,开头的行(即第一列是A)s/,/00,/2:将该行的第二个逗号替换为00,,等价于给第二列末尾加两个0
如果要更精准匹配第二列的数字(避免非数字第二列的意外修改),可以用捕获组写法:
sed '/^A,/ s/\([0-9]\+\),/\100,/' your_file.csv
\([0-9]\+\):捕获第二列的连续数字\100,:将捕获的数字后追加00再加上逗号
方法二:使用awk命令
awk更适合按列处理CSV,逻辑更直观:
awk -F, '$1=="A" { $2 = $2 "00" } 1' OFS=, your_file.csv
-F,:以逗号作为列分隔符$1=="A" { $2 = $2 "00" }:判断第一列等于A时,给第二列追加001:表示打印所有行(满足条件的行已修改,不满足的行原样输出)OFS=,:设置输出的列分隔符为逗号,保证CSV格式正确
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

