我需要使用bash脚本从一个巨大的文本文件中反复删除第一行。
现在我正在使用sed - I -e "1d" $FILE -但它需要大约一分钟的时间来删除。
有没有更有效的方法来实现这个目标?
我需要使用bash脚本从一个巨大的文本文件中反复删除第一行。
现在我正在使用sed - I -e "1d" $FILE -但它需要大约一分钟的时间来删除。
有没有更有效的方法来实现这个目标?
当前回答
因为听起来我不能加快删除,我认为一个好的方法可能是像这样批量处理文件:
While file1 not empty
file2 = head -n1000 file1
process file2
sed -i -e "1000d" file1
end
这样做的缺点是,如果程序在中间被杀死(或者如果其中有一些糟糕的sql -导致“进程”部分死亡或锁定),将会有行被跳过,或者被处理两次。
(file1包含SQL代码行)
其他回答
您可以使用-i来更新文件,而不使用'>'操作符。下面的命令将从文件中删除第一行并将其保存到文件中(在幕后使用临时文件)。
sed -i '1d' filename
应该显示除第一行以外的其他行:
cat textfile.txt | tail -n +2
你可以编辑文件:使用perl的-i标志,像这样:
perl -ni -e 'print unless $. == 1' filename.txt
这将使第一行消失。Perl将需要读取和复制整个文件,但是它会将输出保存在原始文件的名称下。
你可以很容易地做到这一点:
cat filename | sed 1d > filename_without_first_line
在命令行上;或者要永久删除文件的第一行,使用sed的in-place模式,并带-i标志:
sed -i 1d <filename>
可以使用sed命令按行号删除任意行
# create multi line txt file
echo """1. first
2. second
3. third""" > file.txt
删除行并打印到标准输出
$ sed '1d' file.txt
2. second
3. third
$ sed '2d' file.txt
1. first
3. third
$ sed '3d' file.txt
1. first
2. second
# delete multi lines
$ sed '1,2d' file.txt
3. third
# delete the last line
sed '$d' file.txt
1. first
2. second
使用-i选项就地编辑文件
$ cat file.txt
1. first
2. second
3. third
$ sed -i '1d' file.txt
$cat file.txt
2. second
3. third