我需要使用bash脚本从一个巨大的文本文件中反复删除第一行。
现在我正在使用sed - I -e "1d" $FILE -但它需要大约一分钟的时间来删除。
有没有更有效的方法来实现这个目标?
我需要使用bash脚本从一个巨大的文本文件中反复删除第一行。
现在我正在使用sed - I -e "1d" $FILE -但它需要大约一分钟的时间来删除。
有没有更有效的方法来实现这个目标?
当前回答
如果您要做的是在失败后恢复,那么您可以构建一个包含迄今为止所做的工作的文件。
if [[ -f $tmpf ]] ; then
rm -f $tmpf
fi
cat $srcf |
while read line ; do
# process line
echo "$line" >> $tmpf
done
其他回答
你可以很容易地做到这一点:
cat filename | sed 1d > filename_without_first_line
在命令行上;或者要永久删除文件的第一行,使用sed的in-place模式,并带-i标志:
sed -i 1d <filename>
在N-1行上使用tail并将其定向到一个文件中,然后删除旧文件,并将新文件重命名为旧名称,这样做可以吗?
如果我以编程方式执行此操作,我将读取文件,并在读取每一行后记住文件偏移量,因此我可以查找回该位置以读取文件中少一行的文件。
对于那些使用非gnu的SunOS的人来说,下面的代码将会有所帮助:
sed '1d' test.dat > tmp.dat
可以使用vim这样做:
vim -u NONE +'1d' +'wq!' /tmp/test.txt
这应该更快,因为vim在处理时不会读取整个文件。
这一行代码可以做到:
echo "$(tail -n +2 "$FILE")" > "$FILE"
它可以工作,因为tail在echo之前执行,然后文件被解锁,因此不需要临时文件。