给定: 一个带有“特殊”第一行(例如,字段名称)的大文本数据文件(例如 CSV 格式)。
需要: coreutils split -l
命令的等效项,但附加要求原始文件的标题行出现在每个结果片段的开头。
我猜一些 split
和 head
的混合物会起作用吗?
原文由 Arkady 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个单行将大 csv 拆分为 999 条记录,在每条记录的顶部保留标题行(因此 999 条记录 + 1 条标题 = 1000 行)
cat bigFile.csv | parallel --header : --pipe -N999 'cat >file_{#}.csv'
基于 Ole Tange 的回答。
有关安装并行的一些提示,请参阅评论
原文由 Tim Richardson 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
2 回答3.2k 阅读
这是 robhruska 的 脚本清理了一下:
我删除了
wc
,cut
,ls
和echo
在那些不必要的地方。我更改了一些文件名以使它们更有意义。我把它分成多行只是为了更容易阅读。如果您想变得花哨,可以使用
mktemp
或tempfile
创建一个临时文件名,而不是使用硬编码的文件名。编辑
使用 GNU
split
可以这样做:为便于阅读而拆分:
当指定
--filter
时,split
为每个输出文件运行命令(在这种情况下是一个函数,必须导出)并设置变量FILE
,命令的环境,文件名。过滤器脚本或函数可以对输出内容甚至文件名进行任何它想要的操作。后者的一个示例可能是输出到变量目录中的固定文件名:例如
> "$FILE/data.dat"
。