繁体   English   中英

如何删除(大)文件的10%的行?

[英]How to remove 10 % of the lines of a (large) file?

我有一些文件(有些> 30)要删除其行的前10%(从头开始)。

在其他Stack Overflow用户的帮助下,我尝试执行以下操作:

declare -a t
declare -a z
for j in {0..31}; do
    t[$j]=$(wc -l  < h_$j)
    z[$j]=$(echo "${t[$i]}"/10 | bc)
    sed "1,${z[$j]}d" h_$j > hh_$j
done

但是对于某些文件,我不知道为什么,它不起作用。 我虽然说过split ,但是我找不到任何选项,只允许删除前10%而不用原始文件的10%生成10个不同的文件。

使用tail

这使用tail删除了file前10%的行:

tail -n+$(( $(wc -l <file) / 10 )) file

使用sed

sed -n "$(( $(wc -l <file) / 10 ))",'$ p' file

如果要在适当位置更改文件,请使用sed的-i选项:

sed -i -n "$(( $(wc -l <file) / 10 ))",'$ p' file

对于非GNU sed (OSX等),选项-i可能需要一个参数来指定备份文件的扩展名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM