微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 如何拆分文件并保留每个部分的第一行?

给定:一个具有“特殊”第一行的大文本数据文件(例如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] 举报,一经查实,本站将立刻删除。

相关推荐