我有两个文件要比较。一档订货号
1 somedata otherdata
2 somedata otherdata
3 somedata otherdata
4 somedata otherdata
5 somedata otherdata
6 somedata otherdata
7 somedata otherdata
8 somedata otherdata
Y somedata otherdata
Y somedata otherdata
其他订单
1 somedata otherdata
10 somedata otherdata
11 somedata otherdata
12 somedata otherdata
.
.
.
2 somedata otherdata
Y somedata otherdata
Y somedata otherdata
如果我可以在运行第二个文件之前对第二个文件进行排序(因为第一个文件有一个我想保留的标题。该标题的每一行都以 #. 开头),那将使我的生活变得无限轻松,所以我正在比较苹果与苹果。
我试过了:sort -n/home/me/file.txt -o/home/me/newfile.txt
这几乎是我想要的,但它将字母放在顶部而不是底部。像这样:
Y somedata otherdata
Y somedata otherdata
1 somedata otherdata
2 somedata otherdata
3 somedata otherdata
4 somedata otherdata
5 somedata otherdata
6 somedata otherdata
7 somedata otherdata
8 somedata otherdata
我该怎么做才能按数字排序但最终字母排在底部?或者,如果做不到这一点,是否有办法排除以某个字符开头的行?
最佳答案
cat /tmp/file.list | sort -n | grep -v ^[A-Z] > /tmp/file.list.sorted; grep ^[A-Z] /tmp/file.list >> /tmp/file.list.sorted
这将对位于/tmp/file.list 的文件内容进行数字排序(不包括任何以大写字母开头的字符串)并将内容写入/tmp/file.list.sorted。然后再次解析原始 file.list,这次抓取任何以大写字母开头的行,然后将结果附加到/tmp/file.list.sorted 的底部。
关于linux - 在 Linux/Unix 中对文件行进行数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15842325/