繁体   English   中英

如何自动忽略文件的最后三行?

[英]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

说明:

  • 我们将file.txt添加两次,以便awk读取两次。 第一次计算文件中的总行数,第二次打印除最后三行以外的所有行
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM