csv - 替换 csv 中多列中的字符串

标签 csv awk sed

考虑下面的示例:

BRANCH|TXN_ID|CUSTOMER|PROCESS_DATE|VALUE_DATE|AMOUNT|UPLOAD_DATE|NARRATIVE
1|23234|12343|20141030|20141030|2000|20141030|TEST
1|23234|12343|20141030|20141030|2000|20141030|TEST
1|23234|12343|20141030|20141030|2000|20141030|TEST
1|23234|12343|20141030|20141030|2000|20141030|TEST
1|23234|12343|20141030|20141030|2000|20141030|TEST
1|23234|12343|20141030|20141030|2000|20141030|TEST
1|23234|12343|20141030|20141030|2000|20141030|TEST

如果我使用sed 's/20141030/20141029/g',它将替换20141030的所有实例,包括UPLOAD_DATE,这不是我想要的。

来自网络,awk 示例仅替换字符串的一个实例。我需要一次性替换所有实例

所以我的问题是,如何使用 unix 脚本替换第 4 列和第 5 列(处理日期和起息日期)的内容,同时保持文件的格式?结果将被写入一个新文件。

最佳答案

使用awk

awk 'BEGIN{FS=OFS="|"}{sub(20141030,"20141029",$4); sub(20141030,"20141029",$5); print}' inputFile

输出为

BRANCH|TXN_ID|CUSTOMER|PROCESS_DATE|VALUE_DATE|AMOUNT|UPLOAD_DATE|NARRATIVE
1|23234|12343|20141029|20141029|2000|20141030|TEST
1|23234|12343|20141029|20141029|2000|20141030|TEST
1|23234|12343|20141029|20141029|2000|20141030|TEST
1|23234|12343|20141029|20141029|2000|20141030|TEST
1|23234|12343|20141029|20141029|2000|20141030|TEST
1|23234|12343|20141029|20141029|2000|20141030|TEST
1|23234|12343|20141029|20141029|2000|20141030|TEST

关于csv - 替换 csv 中多列中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26650132/

相关文章:

python - 如何在使用 Pandas 从 CSV 中读取整数时优雅地回退到 `NaN` 值?

linux - 需要帮助 shell 脚本来过滤所有者机器列表

sed - 在 sed/awk 中对行范围执行操作

bash - sed 无法将大写字母转换为小写字母

regex - sed 中的正则表达式不起作用

MYSQL 命令获取列标题、位置和排序依据

java - 扩展 ascii 代码中的 Camel Bindy 分隔符

linux - 为什么这个用于匹配数字的 sed 命令不起作用?

python - 网页抓取 : output CSV is messed up

perl - 如何用一些字符串替换 CSV 中的特定列?