linux - 批量将字符串附加到数千个 CSV 的第 1 列 (Linux)

标签 linux bash csv batch-processing

我将通过一个例子尽可能地说明这个问题:

  1. 我的特定目录中有超过 25,000 个 CSV 文件。
  2. 我需要将“-test”附加到每个 CSV 第一列中的每个条目。
  3. 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/

相关文章:

regex - 为什么不能在 bash 正则表达式测试中使用字符串文字?

java -/etc/init.d 中启动时的 Unix 脚本不起作用

linux - 导出最后一个目录的名称

perl - 如何将 .xls 文件转换为 .csv 文件?

linux - boost 和自动配置

c - 为什么系统调用 signal() 不调用处理程序?

C Linux 你如何将参数传递给另一个程序?

linux - 如何比较两个不同的文件并提取重叠数据?

python - 将 Pandas Dataframe 导出为 CSV

python - 读取csv数据时pythoncode中的StopIteration错误