如何根据文件中的最小行删除前X行

Dom*_*red 8 unix linux bash awk sed

我有一个10,000行的文件.使用以下命令,我将删除第10,000行之后的所有行.

sed -i '10000,$ d' file.txt
Run Code Online (Sandbox Code Playgroud)

但是,现在我想删除前X行,使文件不超过10,000行.

我想会是这样的:

sed -i '1,$x d' file.txt
Run Code Online (Sandbox Code Playgroud)

$x超过10,000的行数在哪里.我有点坚持如何写if,然后是它的一部分.或者,我以为我可以使用原始命令而只是cat反向使用文件?

例如,如果我们只想从底部开始3行(在一些有用的答案之后似乎更简单):

输入:

Example Line 1
Example Line 2
Example Line 3
Example Line 4
Example Line 5
Run Code Online (Sandbox Code Playgroud)

预期产出:

Example Line 3
Example Line 4
Example Line 5
Run Code Online (Sandbox Code Playgroud)

当然,如果你知道一种更有效的编写命令的方法,我也会对此持开放态度.您的积极意见得到高度赞赏.

kay*_*lum 10

尾巴可以做你想要的.

tail -n 10000 file.txt
Run Code Online (Sandbox Code Playgroud)


gle*_*man 4

为简单起见,我将反转文件,保留前 10000 行,然后重新反转文件。

它使就地保存文件变得更加复杂

source=file.txt
temp=$(mktemp)
tac "$source" | sed '10000 q' | tac > "$temp" && mv "$temp" "$source"
Run Code Online (Sandbox Code Playgroud)

在不反转文件的情况下,您可以计算行数并进行一些算术运算:

sed -i "1,$(( $(wc -l < file.txt) - 10000 )) d" file.txt
Run Code Online (Sandbox Code Playgroud)