![](/img/trans.png)
[英]How to efficiently get 10% of random lines out of the large file in Linux?
[英]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.