请教一个 sort 命令的问题
- 0次
- 2021-06-24 15:14:43
- idczone
原始文件:
# cat 2.txt
r0:26
r1:26
r10:26
r11:26
r12:26
r13:26
r14:26
排序结果:
# cat 2.txt | sort -k1 -t ':'
r0:26
r10:26
r11:26
r12:26
r1:26
r13:26
r14:26
------------
r1:26 为何在 5 行? 直接 sort 和 sort -g 结果都一样,中间冒号是被忽略的?
看下异常行这个冒号是不是中文格式了
你复制粘贴试试就知道了,没什么卵用,再说如果是中文冒号插在中间是不是也很奇怪
是不是把 r 的 ascii 码也计算在里面变成 r 的 ascii+0 的 ascii 位数排序,试着剔除 r 开头看看
sed 's/^r//' 2.txt | sort -k1n -t ':' | sed 's/^/r/'
勉强能用
cat 2.txt|sort -k 1.2n -t :
KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and the stop position defaults to the line's end. If neither -t nor -b is in effect, characters in a field are counted from the beginning of the preceding whitespace. OPTS is one or more single-letter ordering options [bdfgiMhnRrV], which over ‐ ride global ordering options for that key. If no key is given, use the entire line as the key.
`man sort`中的这段看不懂,哪位能帮忙解释下并举几个例子??
r 和冒号之间如果不是全数字你这个就无法跑了
我的问题是 r1:26 为何在 5 行? 谢谢各位
把 LANG 设置成 C,不然 sort 会出现各种奇怪现象。
% cat 2.txt | LANG=C sort -k1 -t ':'
r0:26
r10:26
r11:26
r12:26
r13:26
r14:26
r1:26
https://stackoverflow.com/questions/6531674/linux-sort-unexpected-output?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
这个回复说的挺好的,其实你的数据
`
r0:26 -> r026
r10:26 -> r1026
r11:26 -> r1226
r12:26 -> ....
r1:26
r13:26
r14:26
`
特殊字符会被忽略,然后按照字典序来进行排序
$cat 2.txt ;echo "----------" && cat 2.txt | sort -k1 -t ':'
r0:26
r1:26
r10:26
r11:26
r12:26
r13:26
r14:26
----------
r0:26
r10:26
r11:26
r12:26
r13:26
r14:26
r1:26
为啥我执行的结果和楼主不一样呢
字典顺序
r1226
r126
r1326
少了个-n ?
按的方法,考虑是否已经默认设置了 LANG 或者 LC_ALL,我的 LANG 默认是 en_US.UTF-8