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

时间:2018-01-18 13:41:42

标签: linux cat tail head

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

array(0) {
}

但这只会给我头文件。

任何帮助>

3 个答案:

答案 0 :(得分:2)

制作command group

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

或重定向一次然后再次附加到同一个文件:

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

答案 1 :(得分:2)

您不想两次阅读数据。一个典型的解决方案是在awk中实现一个环形缓冲区,但这有点痛苦。阅读一次很难用头,因为它可能消耗所有数据并且没有留下尾部,所以你不能只是跑头然后是尾巴。但是你可以利用read的功能,一次不读取多行,并且可以:

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

这样可以避免重复重叠的行(例如,如果你只有30行输入,你就不会获得60行输出)。

答案 2 :(得分:0)

您也可以通过计算行数并将计数与记录数量进行比较,在没有环形缓冲区的gawk中执行此操作:

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

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