[英]How can I automatically disregard the last three lines of a file?
我正在使用以下命令:
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
变量是记录号(包括两个文件),而FNR
是当前文件中的记录号。 它们仅对于第一个文件中的记录相等。 因此,对于第一个文件,我们使用k++
计算其中的行数,然后使用next
跳过其余命令。 FNR<=k-3
如果FNR
变量小于文件中的总行数(我们在上一个项目符号中计数)-3,则expression计算为true,并打印该行。 否则,表达式的计算结果为false(对于最后三行),并且不打印该行。 由于前一个块中的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.