考虑下面的示例:
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/