由于未知长度的文本文件,我怎么能读,例如所有,但第2行的文件?我知道tail
最后N行会给我,但我不知道N会提前多少。
所以对于一个文件
AAAA
BBBB
CCCC
DDDD
EEEE
我想要
CCCC
DDDD
EEEE
和一个文件
AAAA
BBBB
CCCC
我会得到
CCCC
由于未知长度的文本文件,我怎么能读,例如所有,但第2行的文件?我知道tail
最后N行会给我,但我不知道N会提前多少。
所以对于一个文件
AAAA
BBBB
CCCC
DDDD
EEEE
我想要
CCCC
DDDD
EEEE
和一个文件
AAAA
BBBB
CCCC
我会得到
CCCC
Answers:
tail --help
给出以下内容:
-n, --lines=K output the last K lines, instead of the last 10;
or use -n +K to output lines starting with the Kth
因此,要过滤掉第一2
行,-n +3
应该为您提供所需的输出(从3rd开始)。
head
此功能?
使用awk的简单解决方案:
awk 'NR > 2 { print }' file.name
{ print }
是默认操作,可以省略。
使用此方法,假设第一个样本名为sample1.dat,那么tail --lines=3 sample1.dat
它将打印从第三行到最后一行的所有行。
对于第二个示例,再次假设它名为sample2.dat tail --lines=-1 sample2.dat
,它将打印最后一行...
tail +3 anyfile
给出一般情况下的期望结果,而tail --lines=N
需要事先知道N才能给出期望的结果。
tail
……“ 自下而上”吗?(Ba-dum TISH!谢谢,我将整周待在这里...)
我真的不知道该如何从尾巴或头做,但是借助wc -l
(行数)和bash表达式,您可以实现。
tail -$(( $( wc -l $FILE | grep -Eo '[0-9]+' ) - 2 )) $FILE
希望这可以帮助。
使用awk获取除最后两行以外的所有内容
awk 'FNR==NR{n=FNR}FNR<=n-3{print}' file file
awk获取除前2行外的所有内容
awk 'NR>2' file
或者您可以使用更多
more +2 file
或只是重击
#!/bin/bash
i=0
while read -r line
do
[[ $i > 1 ]] && echo "$line"
((i++))
done <"file"