我找过了,但是我找不到任何东西。我有一个file.txt,我想提取前50行和最后50行,并将它们输出到一个新文件中。我试过了:
head -n50 && tail -n50 > newfile.txt但这只给了我头文件。
任何help>
发布于 2018-01-18 21:44:05
创建一个command group
{ head -n50 file.txt && tail -n50 file.txt; } > newfile.txt或者再次重定向以附加到同一文件:
head -n50 file.txt > newfile.txt && tail -n50 file.txt >> newfile.txt发布于 2018-01-18 21:57:55
您不会想要读取数据两次。一个典型的解决方案是在awk中实现一个环形缓冲区,但这有点麻烦。读一次head是很困难的,因为它可能会消耗所有的数据,而不会留下任何数据给tail,所以你不能只运行head和tail。但是,您可以利用read的特性,即一次不读取多行内容,并执行以下操作:
{ for i in $(seq 50); do read line; printf "%s\n" "$line"; done; tail -50; } < file.txt > newfile.txt这将避免重复重叠的行(例如,如果你只有30行输入,你不会得到60行的输出)。
发布于 2018-01-19 10:45:09
您还可以在没有环形缓冲区的gawk中执行此操作,方法是对行进行计数,并将计数与记录数进行比较:
gawk 'BEGINFILE {lineCount=0; while ((getline line < FILENAME) > 0 ) {lineCount++}} (FNR <= 50 || FNR >= lineCount-50 ) {print}' input_file.txt > output_file.txt从技术上讲,您仍然会读取同一文件两次,但至少在单个程序中会发生这种情况。
https://stackoverflow.com/questions/48322770
复制相似问题