在数百万个csv文件上运行bash脚本

Kau*_*hik 3 bash cygwin sed

我试图bash在超过100万的csv文件下运行脚本:

#!/bin/bash
new_header="cell,id,too,issue,valid,DPT,RH,TMP,U,V"
sed -i'' "1s/.*/$new_header/" /cygdrive/d/csv/*.csv
Run Code Online (Sandbox Code Playgroud)

但是在运行此代码时,我收到以下错误:

./bash.sh: line 3: 11464 Segmentation fault      (core dumped) sed -i'' "1s/.*/$new_header/" /cygdrive/d/csv/*.csv
Run Code Online (Sandbox Code Playgroud)

我确信有一些方法可以在100万个csv文件上运行脚本,但我还没有找到任何东西.

Tom*_*ech 5

我想扩展生成的命令行长度/cygdrive/d/csv/*.csv太长.

解决这个问题的一种方法是使用find:

find /cygdrive/d/csv/ -name '*.csv' -exec sed -i '' "1s/.*/$new_header/" {} +
Run Code Online (Sandbox Code Playgroud)

这将运行所需的最小数量的单独sed进程,使命令长度保持在限制范围内.

正如评论中所提到的,如果你的sed版本实际上需要传递一个参数-i(GNU sed没有),那么你需要一个空格''.否则你可以删除''.