什么是头相反? 我只想要一个文件的前N行
给定一个长度不明的文本文件,我怎么读,例如文件的前两行除外? 我知道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
应该给你你正在寻找的输出(从第三个开始)。
假设你的尾巴版本支持它,你可以指定在X行之后开始尾巴。 在你的情况下,你会做2 + 1。
tail -n +3 [mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt CCCC DDDD EEEE
使用awk的简单解决scheme:
awk 'NR > 2 { print }' file.name
试试sed 1,2d
。 根据需要replace2。
tail -n +linecount filename
名将开始输出在filename
行linecount
,所以tail -n +3 filename
应该做你想要的。
使用这个,假设第一个样本叫做sample1.dat,然后tail --lines=3 sample1.dat
这将打印从第三行到最后一行的所有行。
对于第二个示例,再次假设它被称为sample2.dat它将是tail --lines=-1 sample2.dat
这将打印最后一行…
我真的不知道如何从尾部或头部做到这一点,但在wc -l
(行数)和bashexpression式的帮助下,您可以实现这一点。
tail -$(( $( wc -l $FILE | grep -Eo '[0-9]+' ) - 2 )) $FILE
希望这可以帮助。
用awk去除最后2行
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"