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

时间:2014-10-05 16:15:43

标签: bash sed split

我有一些文件(有些> 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%的原始文件。

1 个答案:

答案 0 :(得分:3)

使用tail

这使用tailfile删除前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可能需要一个参数来指定备份文件的扩展名。