鉴于长度未知的文本文件,我如何阅读,例如所有但文件的前两行?我知道tail
会给我最后N行,但我不知道N是提前的。
所以对于文件
AAAA
BBBB
CCCC
DDDD
EEEE
我想要
CCCC
DDDD
EEEE
对于文件
AAAA
BBBB
CCCC
我只是
CCCC
答案 0 :(得分:180)
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
应该为您提供所需的输出(从第3行开始)。
答案 1 :(得分:18)
假设您的尾部版本支持它,您可以指定在X行之后开始尾部。在你的情况下,你做2 + 1。
tail -n +3
[mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE
答案 2 :(得分:12)
使用awk的简单解决方案:
awk 'NR > 2 { print }' file.name
答案 3 :(得分:7)
试试sed 1,2d
。根据需要替换2。
答案 4 :(得分:5)
tail -n +linecount filename
将在linecount
的第filename
行开始输出,因此tail -n +3 filename
应该做你想做的事。
答案 5 :(得分:0)
使用此选项,假设第一个样本名为sample1.dat,然后是tail --lines=3 sample1.dat
,它将打印从第3行到最后一行的所有行。
对于第二个样本,再次假设它被称为sample2.dat,它将是tail --lines=-1 sample2.dat
,它将打印最后一行......
答案 6 :(得分:0)
我真的不知道如何从尾巴或头部开始,但在wc -l
(行计数)和bash表达式的帮助下,你可以实现这一点。
tail -$(( $( wc -l $FILE | grep -Eo '[0-9]+' ) - 2 )) $FILE
希望这有帮助。
答案 7 :(得分:-1)
使用awk获取除最后2行之外的所有内容
awk 'FNR==NR{n=FNR}FNR<=n-3{print}' file file
获取除前2行之外的所有内容
awk 'NR>2' file
或者你可以使用更多
more +2 file
或只是bash
#!/bin/bash
i=0
while read -r line
do
[[ $i > 1 ]] && echo "$line"
((i++))
done <"file"