我将通过一个例子尽可能地说明这个问题:
- 我的特定目录中有超过 25,000 个 CSV 文件。
- 我需要将“-test”附加到每个 CSV 第一列中的每个条目。
- CSV 中没有标题,每个条目都是唯一的,每个文件名都是唯一的。
所以这个:
Column1,Column2,Column3,Column4
Unique,Entry2,Entry3,Entry4
Unique,Entry2,Entry3,Entry4
Unique,Entry2,Entry3,Entry4
会变成这样:
Column1,Column2,Column3,Column4
Unique-test,Entry2,Entry3,Entry4
Unique-test,Entry2,Entry3,Entry4
Unique-test,Entry2,Entry3,Entry4
对于我的目录中超过 25,000 个文件。
是否有 bash 脚本可以完成此任务?
*编辑 后来发现 CSV 以逗号分隔并被“s 包围。此更改将在下面解决。
最佳答案
简单地说:
find . -type f -name '*.csv' -exec sed -e '2,$s/,/-test,/' -i {} +
find
命令将生成系统可以容纳的命令行,
sed -i
将执行文件内更改,从第 2 行到文件末尾,用 -test,
替换第一个逗号 ,
对于带引号的 CSV:
find . -type f -name '*.csv' -exec sed -e '2,$s/",/-test",/' -i {} +
对于包含引号、双引号或不包含任何内容的 CSV:
find . -type f -name '*.csv' -exec sed -e '2,$s/\(["\o47]\?,\)/-test\1/' -i {} +
这个可以与 CSV 一起使用,例如:
'Column1','Column2','Column3','Column4'
'Unique','Entry2','Entry3','Entry4'
'Unique','Entry2','Entry3','Entry4'
"Column1","Column2","Column3","Column4"
"Unique","Entry2","Entry3","Entry4"
"Unique","Entry2","Entry3","Entry4"
Column1,Column2,Column3,Column4
Unique,Entry2,Entry3,Entry4
Unique,Entry2,Entry3,Entry4
并且可以渲染:
'Column1','Column2','Column3','Column4'
'Unique-test','Entry2','Entry3','Entry4'
'Unique-test','Entry2','Entry3','Entry4'
"Column1","Column2","Column3","Column4"
"Unique-test","Entry2","Entry3","Entry4"
"Unique-test","Entry2","Entry3","Entry4"
Column1,Column2,Column3,Column4
Unique-test,Entry2,Entry3,Entry4
Unique-test,Entry2,Entry3,Entry4
关于linux - 批量将字符串附加到数千个 CSV 的第 1 列 (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47775022/