Linux 排序命令:如何对字段中嵌入的数字进行排序?

Linux 排序命令:如何对字段中嵌入的数字进行排序?

我在 RHEL 6 上使用 BASH。

我正在尝试根据字段中嵌入的数字对文件中的某些行进行排序。文件名为 word.txt。

这是我正在使用的命令:

sort -n -k4 word.txt

这是我得到的输出,不是按数字顺序排列的:

INSERT INTO area_names VALUES(124,'NewYork');
INSERT INTO area_names VALUES(125,'NewYork');
INSERT INTO area_names VALUES(12,'NewYork');

显然,只有“12”的行应该放在第一行。

“VALUES(” 后面的数字可以是任意长度

我如何告诉 sort 对“VALUES(”和“,”之间的数字进行排序?

我可以采用一种解决方法,即在数据的“VALUES(”后面放置一个空格,但除非这是最好的选择,否则我宁愿不这样做。

答案1

尝试这个:

 sort -t "(" -k2,2 -n word.txt

输出

插入 area_names 值(12,'纽约');
插入 area_names 值(124,'NewYork');
插入 area_names 值(125,'NewYork');

-k 位置1[,位置2]

     指定一个排序字段,该字段由
     POS1 和 POS2 (如果省略 POS2,则为行尾),
     _包括的_。

     每个 POS 的形式为 `F[.C][OPTS]',其中 F 是
     字段使用,C 是第一个字符的编号
     字段的开头。字段和字符位置是
     从 1 开始编号;POS2 中的字符位置为零
     表示字段的最后一个字符。如果省略“.C”
     POS1,默认为1(字段的开头);如果省略
     从 POS2 开始,它默认为 0(字段结尾)。OPTS 是
     排序选项,允许根据以下条件对单个键进行排序
     不同的规则;详情见下文。键可以跨越多个
     字段。

     例如:要按第二个字段排序,请使用 `--key=2,2' (`-k 2,2')。

相关内容