首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并头部和尾部并输出文件

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

Stack Overflow用户
提问于 2018-01-18 21:41:42
回答 3查看 1.8K关注 0票数 0

我找过了,但是我找不到任何东西。我有一个file.txt,我想提取前50行和最后50行,并将它们输出到一个新文件中。我试过了:

代码语言:javascript
复制
head -n50 && tail -n50 > newfile.txt

但这只给了我头文件。

任何help>

EN

回答 3

Stack Overflow用户

发布于 2018-01-18 21:44:05

创建一个command group

代码语言:javascript
复制
{ head -n50 file.txt && tail -n50 file.txt; } > newfile.txt

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

代码语言:javascript
复制
head -n50 file.txt > newfile.txt && tail -n50 file.txt >> newfile.txt
票数 3
EN

Stack Overflow用户

发布于 2018-01-18 21:57:55

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

代码语言:javascript
复制
{ for i in $(seq 50); do read line; printf "%s\n" "$line"; done; tail -50; } < file.txt > newfile.txt

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

票数 2
EN

Stack Overflow用户

发布于 2018-01-19 10:45:09

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

代码语言:javascript
复制
gawk 'BEGINFILE {lineCount=0; while ((getline line < FILENAME) > 0 ) {lineCount++}} (FNR <= 50 || FNR >= lineCount-50 ) {print}' input_file.txt > output_file.txt

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48322770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档