我想删除除最后一行或前n行之外的所有行,并使用短单行
例如:
---
aaaa
bbbb
cccc
dddd
cat/echo/find ... | sed < all except last 2 lines >
应该结果
aaaa
bbbb
---
aaaa
bbbb
cccc
dddd
eeee
ffff
cat/echo/find ... | sed < all except last 2 lines >
应该结果
aaaa
bbbb
cccc
dddd
---
我也需要这个非常高的n。所以可以设置n = 100左右;)
Thanx任何帮助!
答案 0 :(得分:4)
要删除最后两行,您可以使用以下内容:
head -n $(($(wc -l < "$filename") - 2)) "$filename"
不是很优雅,但应该有效。我使用wc -l来计算行数,然后使用head来显示第一行数减去2行。
编辑:保持仅限你可以执行的N
行
tail -n $N $filename
保持仅限您可以执行的第N
行。
head -n $N $filename
似乎我可能误解了你的问题,这就是我添加这两个命令的原因。
答案 1 :(得分:4)
从头文手册页:
-n, --lines=[-]N
print the first N lines instead of the first 10; with the lead-
ing ‘-’, print all but the last N lines of each file
这意味着... | head -n -2
会做你想做的事。
作为替代方案,以下内容也有效,但我认为它的效率对大文件来说并不好。
tac file | awk 'NR>2' | tac
答案 2 :(得分:2)
我想删除除n last之外的所有行
最简单的方法是做(让n = 5):
tail -n5 $filename > $filename.tmp && mv $filename.tmp $filename
这会将最后五行输出到新文件,然后重命名。
如果任务相反 - 您需要所有行,但最后需要5行,您可以这样做:
head -n$((`cat $filename | wc -l` - 5)) $filename > $filename.tmp && mv $filename.tmp $filename
答案 3 :(得分:1)
保留文件的最后1000行(例如:alert_PROD.log)
fbset -fb /dev/fb0
tvservice -d edid
edidparser edid
要保持前1000行使用head而不是tail命令:
tail -1000 alert_PROD.log > alert_tmp ; cat alert_tmp > alert_PROD.log ; rm alert_tmp
答案 4 :(得分:0)
删除输入文件的最后3行:
set 3 inputfile; sed "$(($(sed -n $= $2)-$1+1)),\$d" $2
答案 5 :(得分:0)
要打印除文件的前3行以外的所有行,然后除了最后3行之外的所有行:
$ cat -n file
1 a
2 b
3 c
4 d
5 e
6 f
7 g
$ awk -v sz="$(wc -l < file)" 'NR>3' file
d
e
f
g
$ awk -v sz="$(wc -l < file)" 'NR<=(sz-3)' file
a
b
c
d
答案 6 :(得分:-1)
你可以使用头尾:
删除前n行以外的所有行:
head -n filename&gt; new_filename
删除除最后n行之外的所有行:
tail -n filename&gt; new_filename
以下是一个例子:
$ cat test
1
2
3
4
5
6
7
8
$ head -2 test
1
2
答案 7 :(得分:-1)
您也可以尝试
awk -vn=2 -f rem.awk input.txt
其中rem.awk
是
BEGIN { ("wc -l " ARGV[1]) | getline
a=$1-n+1 }
NR<a { print }