给定:一个具有“特殊”第一行的大文本数据文件(例如CSV格式)(例如,字段名称).
通缉:相当于coreutils split -l命令,但附加要求原始文件中的标题行出现在每个结果片段的开头.
我猜一些分裂和头部的混合会做的伎俩?
解决方法:
这是robhruska的脚本清理了一下:
tail -n +2 file.txt | split -l 4 - split_
for file in split_*
do
head -n 1 file.txt > tmp_file
cat "$file" >> tmp_file
mv -f tmp_file "$file"
done
我在不需要的地方移除了wc,cut,ls和echo.我改变了一些文件名,使它们更有意义.我把它分成多行只是为了让它更容易阅读.
如果你想获得花哨,可以使用mktemp或tempfile来创建临时文件名,而不是使用硬编码文件名.
编辑
使用GNU split可以执行此操作:
split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }; export -f split_filter; tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
因可读性而破裂:
split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }
export -f split_filter
tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
指定–filter时,split会为每个输出文件运行命令(在这种情况下为必须导出的函数),并将命令环境中的变量FILE设置为文件名.
过滤器脚本或函数可以对输出内容甚至文件名进行任何操作.后者的一个例子可能是输出到变量目录中的固定文件名:>例如,“$FILE / data.dat”.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。