繁体   English   中英

合并头部和尾部并输出文件

[英]Combining head and tail and outputting the file

我进行了搜索,但没有找到任何有效的方法。 我有一个file.txt文件,我想提取前50行和后50行,并将它们输出到新文件中。 我试过了:

head -n50 && tail -n50 > newfile.txt

但这只给了我头文件。

任何帮助>

创建一个命令组

{ head -n50 file.txt && tail -n50 file.txt; } > newfile.txt

或再次重定向以追加到同一文件:

head -n50 file.txt > newfile.txt && tail -n50 file.txt >> newfile.txt

您不想两次读取数据。 一个典型的解决方案是在awk中实现一个环形缓冲区,但这有点麻烦。 用head读取一次是很困难的,因为它可能会消耗所有数据,而不会留下任何数据,因此您不能只运行head,然后运行tail。 但是您可以利用read的功能,一次不读取多行,然后执行以下操作:

{ for i in $(seq 50); do read line; printf "%s\n" "$line"; done; tail -50; } < file.txt > newfile.txt

这将避免重复的行重复(例如,如果只有30行输入,则不会有60行输出)。

您也可以在无环缓冲区的gawk中执行此操作,方法是对行进行计数并将计数与记录数进行比较:

gawk 'BEGINFILE {lineCount=0; while ((getline line < FILENAME) > 0 ) {lineCount++}} (FNR <= 50 || FNR >= lineCount-50 ) {print}' input_file.txt > output_file.txt

从技术上讲,您仍在读取同一文件两次,但至少在单个程序中发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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