给定一个未知长度的文本文件,我如何阅读,例如除了文件的前 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
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 行开始)。
假设您的 tail 版本支持它,您可以指定在 X 行之后开始 tail。在你的情况下,你会做 2+1。
tail -n +3
[mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE
使用 awk 的简单解决方案:
awk 'NR > 2 { print }' file.name
试试sed 1,2d
。根据需要更换 2 个。
tail -n +linecount filename
将在行开始输出linecount
,filename
所以tail -n +3 filename
应该做你想做的事。
使用这个,假设第一个样本被称为 sample1.dat 那么tail --lines=3 sample1.dat
它将打印从第 3 行到最后一行的所有行。
对于第二个样本,再次假设它被称为 sample2.dat 它将tail --lines=-1 sample2.dat
打印最后一行......
我真的不知道如何从尾部或头部做到这一点,但在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 获取除前两行之外的所有内容
awk 'NR>2' file
或者你可以使用更多
more +2 file
或者只是 bash
#!/bin/bash
i=0
while read -r line
do
[[ $i > 1 ]] && echo "$line"
((i++))
done <"file"