在csh中对文件指定列排序时如何保留前三行表头且不操作其他文件
保留表头对文件指定列排序的实现方法
需求说明
对file.rpt文件操作时保留前3行表头完全不变,仅对后续数据行按第4列数值降序排序,无需操作其他临时文件。
可用方案
方案1:全环境通用方案
该写法兼容所有POSIX标准的shell环境,无需依赖额外工具:
{ head -n 3 file.rpt; tail -n +4 file.rpt | sort -nrk4,4; }
逻辑说明:
- 大括号
{ }将两个命令组合为一个输出组,结果会连续输出 head -n 3 file.rpt原样输出前3行表头tail -n +4 file.rpt提取第4行及之后的所有数据行,传递给sort命令按第4列做数值逆序排序
如果需要直接覆盖原文件,可使用moreutils包提供的sponge工具避免重定向时清空原文件:
{ head -n 3 file.rpt; tail -n +4 file.rpt | sort -nrk4,4; } | sponge file.rpt
方案2:GNU Sort 简化方案
如果使用的是8.25及以上版本的GNU Sort(绝大多数Linux发行版默认带的版本都满足),可以直接用内置的--header参数跳过前N行排序,写法更简洁:
sort -nrk4,4 --header=3 file.rpt
原写法错误原因
你之前的尝试存在两个问题:
- 没有限制sort仅处理数据行,前3行表头也会被纳入排序逻辑
- 管道结尾的
-没有对应接收输入的命令,语法不合法,无法执行
内容的提问来源于stack exchange,提问作者user3835935
相关产品推荐
相关产品推荐

