我正在使用以下命令:
head -36 file.txt > file1.txt
其中文件是 39 行,但问题是我正在检查文件是 39 行,因此将数字 36 放在注释中。那么有没有一种方法可以让命令计算行数并减去最后 3 行?
awk -v nr=$(wc -l <file) 'NR<(nr-2)' file
nl=`wc -l file.txt | awk 's=$1-3{print s}'`; head -n $nl file.txt
wc -l
计算总行数。使用 awk,您可以打印总行数-3
。然后使用head
只读那么多行......
这是 awk 唯一的解决方案(没有进程替换、管道等)
awk 'NR==FNR{k++;next}FNR<=k-3' file.txt file.txt
解释:
NR==FNR{k++;next}
:NR
变量是记录号(包括两个filee),FNR
是当前文件中的记录号。它们仅对第一个文件中的记录相等。因此,对于第一个文件,我们用 计算其中的行数,k++
然后用 跳过剩余的命令next
。FNR<=k-3
如果FNR
变量小于文件中的总行数(我们在上一个项目符号中计算) - 3,则表达式计算为真,并打印该行。否则,表达式的计算结果为假(对于最后三行),并且不打印该行。next
由于前一个块中的命令,这只发生在第二个文件中。嘿,你想告诉它要排除多少行,而不是你最终会得到多少行。
还要添加-n
以检查空文件。
head -n -3 file.txt
head -n -3 file.txt > temp.txt ; mv temp.txt file.txt
这应该工作
head -n -3 file.txt
从man head
-n, --lines=[-]K
print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file