我有一些文件(有些> 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%的原始文件。
答案 0 :(得分:3)
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
可能需要一个参数来指定备份文件的扩展名。