Shell脚本技巧:如何对文本文件中的数组进行排序
用Shell脚本排序文本文件中的数字数组
没问题!这事儿用Shell自带的工具就能轻松搞定,给你两种实用的方法,完全匹配你的需求:
方法1:一行命令快速处理
如果你的文本文件里只有一行空格分隔的数字(就像你给出的示例那样),直接用这行命令就行:
tr ' ' '\n' < numbers.txt | sort -n | tr '\n' ' '
给你拆解下每个部分的作用:
tr ' ' '\n' < numbers.txt:把文件里的空格换成换行,让每个数字单独占一行,这样sort才能逐个处理sort -n:按数值大小排序(划重点!如果不加-n,sort会按字符串字典序排,比如11会排在2前面,这可不是我们要的结果)tr '\n' ' ':把排序后的换行再换回空格,还原成你要的空格分隔格式
要是想直接把排序后的结果保存到新文件,加个重定向就行:
tr ' ' '\n' < numbers.txt | sort -n | tr '\n' ' ' > sorted_numbers.txt
方法2:写成可复用的Shell脚本
如果需要反复用这个功能,不如把逻辑写成一个小脚本,方便调用:
- 创建一个名为
sort_numbers.sh的文件,把下面的内容复制进去:
#!/bin/bash # 先检查用户有没有传对文件名,以及文件是否存在 if [ $# -ne 1 ] || [ ! -f "$1" ]; then echo "用法:./sort_numbers.sh <待排序的文件名>" echo "示例:./sort_numbers.sh numbers.txt" exit 1 fi # 执行排序逻辑,最后加个换行让输出更整洁 tr ' ' '\n' < "$1" | sort -n | tr '\n' ' ' echo
- 给脚本加上执行权限:
chmod +x sort_numbers.sh
- 使用的时候直接传入文件名就行:
./sort_numbers.sh numbers.txt
同样,要保存结果的话就加重定向:
./sort_numbers.sh numbers.txt > sorted_numbers.txt
测试验证
用你的示例输入测试:
输入文件内容:
11 23 4 9 5 2 17 25
执行命令后输出:
2 4 5 9 11 17 23 25
完全符合你想要的结果~
内容的提问来源于stack exchange,提问作者Hồ Tấn Đạt
相关产品推荐
相关产品推荐

