Unix管道命令提取学生等级数据结果异常,错误原因排查
错误原因说明
你写的命令问题不在管道内的命令排序,核心错误出在输入输出流向配置错误,具体问题有两个:
- 开头的
echo |会向管道传递空内容,导致后续sort命令根本拿不到/home/areej7/file.c里的学生数据,相当于前面的排序逻辑完全没有处理目标文件。 - 末尾的
head -n 1 /home/areej7/file.c、tail -n 1 /home/areej7/file.c指定了直接读取原始文件作为输入源,会完全忽略前面管道传递的排序、裁剪后的结果,相当于你前面写的sort、cut逻辑全部没有生效,输出的是原始文件的首尾行内容,自然不符合预期。
正确实现命令
你只需要把目标文件作为sort的输入源,同时去掉head、tail后的文件名参数,让它们直接读取管道传递的处理后内容即可:
# 输出最低等级及对应学生姓名(数值从小到大排序后取第一行) sort -n -k 3 /home/areej7/file.c | cut -f 1,3 | head -n 1 # 输出最高等级及对应学生姓名(数值从小到大排序后取最后一行) sort -n -k 3 /home/areej7/file.c | cut -f 1,3 | tail -n 1
注意:如果你的文件字段是用空格而非默认制表符分隔的,需要给
cut命令增加-d ' '参数指定分隔符,即修改为cut -d ' ' -f 1,3。
内容的提问来源于stack exchange,提问作者Areej
相关产品推荐
相关产品推荐

