首页 > 解决方案 > 如何在使用 bash 维护标题和文件扩展名的同时将大型 CSV 文件拆分为小部分

问题描述

我正在使用下面的脚本使用 Bash 拆分一个大的 CSV 文件。文件被拆分并维护标题是每个输出文件。

csvheader=`head -1 largeFile.csv`
split -d -l500 largeFile.csv smallFile_split_
find .|grep smallFile_split_ | xargs sed -i "1s/^/$csvheader\n/"
sed -i '1d' smallFile_split_t_00

但是,我还想在每个拆分部分维护 .csv 文件扩展名。

当前输出是 smallFile_split_00,而我希望它是 smallFile_split_00.csv

我试过使用split -l 500 -d .csv largeFile.csv file,但似乎没有用。

如果您有任何想法,将不胜感激。

标签: bashcsvsplit

解决方案


拆分后重命名即可。

find似乎是多余的;你只想

for file in smallFile_split_*; do
    case $file in
      smallFile_split_t_00)
        cat "$file" ;;
      *)
        sed "1s/^/$csvheader\n/" "$file";;
    esac >"$file.csv"
    rm "$file"
done

除了在这里不必要之外,find还将遍历任何子目录,在这种情况下显然您不需要。


推荐阅读