我使用以下命令:
head -36 file.txt > file1.txt
文件是39行,但事实是我正在检查文件是39行,所以将数字36放在注释中。那么有一种方法,命令计算行数并扣除最后3行?
答案 0 :(得分:3)
awk -v nr=$(wc -l <file) 'NR<(nr-2)' file
答案 1 :(得分:2)
nl=`wc -l file.txt | awk 's=$1-3{print s}'`; head -n $nl file.txt
wc -l
计算总行数。使用awk,您可以打印总行数-3
。然后使用head
只读取那么多行...
答案 2 :(得分:1)
这是awk唯一的解决方案(没有流程替换,管道等)
awk 'NR==FNR{k++;next}FNR<=k-3' file.txt file.txt
说明:
NR==FNR{k++;next}
:NR
变量是记录号(包括两个文件),FNR
是当前文件中的记录号。它们仅对第一个文件中的记录相同。因此,对于第一个文件,我们使用k++
计算其中的行,然后我们使用next
跳过剩余的命令。FNR<=k-3
如果FNR
变量小于文件中的总行数(我们在上一个项目符号中计算) - 3,则表达式的计算结果为true,并打印该行。否则,表达式的计算结果为false(对于最后三行),并且不打印该行。这只发生在第二个文件中,因为前一个块中有next
命令。答案 3 :(得分:0)
嘿,你想告诉它要排除多少行,而不是你最终会有多少行。
同时添加-n
以检查空文件。
head -n -3 file.txt
<小时/> 如果没有尝试使用临时文件
head -n -3 file.txt > temp.txt ; mv temp.txt file.txt
答案 4 :(得分:-1)
这应该有效
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